iOS5以SOAP方式連接與ASP.NET Web Service 溝通

iOS5以SOAP方式連接與ASP.NET Web Service 溝通

測試環境

Web Service Site: VS2010(C#)、IIS7、Windows 2008 Server R2。

iOS App:Xcode4.2、iOS5。

Web Service

使用VS2010建立一個簡單的Web Service網站,供測試。

內容非常單純。

image

為GetXMLDoc準備的XML檔。

image

發布到IIS7網站,測試執行。

image

GetXMLDoc描述。

image

 

iOS App

一、建立一個 Empty Project。

image

專案名稱取名為 CoreDataFromWebService。

image

二、因為我們建立的是一個Empty Project,所以必須自己加入介面控制項

新增一個 UIViewController

image

 

選 “New File”

image

image

取名為 iPhoneRootViewController

image

專案內應有的檔案如下所示

image

 

三、把新增的 iPhoneRootViewController 設定為專案的進入點介面

編輯HLAppDelegate.h

把iPhoneRootViewController類別宣告進來。

(1)注意引入 iPhoneRootViewController.h 別忘了。

image

編輯HLAppDelegate.m

(1)把在 HLAppDelegate.h 中宣告好的 rootViewController 含進來。

(2)在application didFinishLaunchingWithOptions:方法內,將 rootViewcontroller 的介面指定載入,由於是手動載入根畫面,必須設定 View 的載入位置,扣除 Status Bar 的高度,重新指定 y 軸原點。

image

編輯 iPhoneRootViewController.h

在此建立廣域變數,且大部分作為溝通中間的橋樑變數均使用 mutable 的變數,注意。

(1)webData作為溝通結果的儲存變數

(2)conn代表的是與SOAP Web Service的連結實體。

(3)注意 NSURLConnectionDelegate 及 NSURLConnectionDataDelegate 的委派加入。

image

 

編輯 iPhoneRootViewController.m

(1)檔頭含入變數。

image

(2)建立 SOAP Web Service 連線步驟

A、建 NSURL 物件。(需要連線網址字串 NSString)

B、建 NSMutableURLRequest 物件。

C、建 NSURLConnection ,並載入實體。

D、這裡有一個要特別注意的地方是SOAP Message的定義,看起來似乎很複雜,有些人可能乍看手就軟了,其實請配合 SOAP Web Service WSDL說明剪貼就很簡單了,千萬不要真的逐字打。

image

連到服務網址的xxx.asmx網頁,選擇方法,都會秀出描述

參照顯示資訊,一一貼到對應方法填入參數即可。

image

有個地方要注意不要照貼,就是Content-Length的內容,請依實際填入。

image

 

建立

(1)NSURLConnection: didReceiveResponse 對應行為

(2)NSURLConnection: didReceiveData對應行為

(3)NSURLConnection: didFailWithError對應行為

(4)connectionDidFinishLoading對應行為

如果以下方法事件在Xcode中不會自動帶出,表示沒有在 iPhoneRootViewController.m 檔頭 interface 處,將 NSURLConnectionDelegate 及 NSURLConnectionDataDelegate這兩個委派加入。請自行補入。

指定 NSURLConnection: didReceiveResponse 事件觸發行為

image

指定 NSURLConnection: didReceiveData事件觸發行為

image

指定 NSURLConnection: didFailWithError 事件觸發行為

image

指定 connectionDidFinishLoading 行為

SOAP Web Service 傳回的是 XML,故使用 initWithBytes 方式轉回字串。

把結果同步顯示在 Xcode控制台及iPhone介面的TextView 控制項內。

image

最後利用Xcode的 Interface Builder 拖拉功能,建立頁面上各項物件與 rootViewController 的關聯,及按鈕對應執行方法。

安排頁面物件

安排頁面物件

安排關聯

安排關聯

 

執行結果

執行結果