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網站,供測試。
內容非常單純。
為GetXMLDoc準備的XML檔。
發布到IIS7網站,測試執行。
GetXMLDoc描述。
iOS App
一、建立一個 Empty Project。
專案名稱取名為 CoreDataFromWebService。
二、因為我們建立的是一個Empty Project,所以必須自己加入介面控制項
新增一個 UIViewController
選 “New File”
取名為 iPhoneRootViewController
專案內應有的檔案如下所示
三、把新增的 iPhoneRootViewController 設定為專案的進入點介面
編輯HLAppDelegate.h
把iPhoneRootViewController類別宣告進來。
(1)注意引入 iPhoneRootViewController.h 別忘了。
編輯HLAppDelegate.m
(1)把在 HLAppDelegate.h 中宣告好的 rootViewController 含進來。
(2)在application didFinishLaunchingWithOptions:方法內,將 rootViewcontroller 的介面指定載入,由於是手動載入根畫面,必須設定 View 的載入位置,扣除 Status Bar 的高度,重新指定 y 軸原點。
編輯 iPhoneRootViewController.h
在此建立廣域變數,且大部分作為溝通中間的橋樑變數均使用 mutable 的變數,注意。
(1)webData作為溝通結果的儲存變數
(2)conn代表的是與SOAP Web Service的連結實體。
(3)注意 NSURLConnectionDelegate 及 NSURLConnectionDataDelegate 的委派加入。
編輯 iPhoneRootViewController.m
(1)檔頭含入變數。
(2)建立 SOAP Web Service 連線步驟
A、建 NSURL 物件。(需要連線網址字串 NSString)
B、建 NSMutableURLRequest 物件。
C、建 NSURLConnection ,並載入實體。
D、這裡有一個要特別注意的地方是SOAP Message的定義,看起來似乎很複雜,有些人可能乍看手就軟了,其實請配合 SOAP Web Service WSDL說明剪貼就很簡單了,千萬不要真的逐字打。
連到服務網址的xxx.asmx網頁,選擇方法,都會秀出描述
參照顯示資訊,一一貼到對應方法填入參數即可。
有個地方要注意不要照貼,就是Content-Length的內容,請依實際填入。
建立
(1)NSURLConnection: didReceiveResponse 對應行為
(2)NSURLConnection: didReceiveData對應行為
(3)NSURLConnection: didFailWithError對應行為
(4)connectionDidFinishLoading對應行為
如果以下方法事件在Xcode中不會自動帶出,表示沒有在 iPhoneRootViewController.m 檔頭 interface 處,將 NSURLConnectionDelegate 及 NSURLConnectionDataDelegate這兩個委派加入。請自行補入。
指定 NSURLConnection: didReceiveResponse 事件觸發行為
指定 NSURLConnection: didReceiveData事件觸發行為
指定 NSURLConnection: didFailWithError 事件觸發行為
指定 connectionDidFinishLoading 行為
SOAP Web Service 傳回的是 XML,故使用 initWithBytes 方式轉回字串。
把結果同步顯示在 Xcode控制台及iPhone介面的TextView 控制項內。
最後利用Xcode的 Interface Builder 拖拉功能,建立頁面上各項物件與 rootViewController 的關聯,及按鈕對應執行方法。
安排頁面物件
安排關聯
執行結果