IOS 呼叫WebService 同步和非同步
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
因為公司的服務全都是webservice,每次總要花費大量時間在除錯服務上面,乾脆就寫了一個解析wsdl的專案,希望將來能用上吧。還未經過烘焙,有問題,還請高手點播點播。
下面,我拿天氣服務的wsdl作為例子吧。
服務的WSDL地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
WSDL包含以下節點
definitions 根節點
根節點下面有以下節點:
types 資料型別定義。方法的引數名都包含在裡面。
message 訊息資料結構。
portType 描述服務和服務的方法。
binding 描述Web Service的通訊協議。
service 描述Web Service 的訪問點的集合。
下面對來一步一步解析如何根據wsdl 生成SOAP 訊息體。
1.新增一個類擴充套件,如下圖DDXMLElement+WSDL.h和DDXMLElement+WSDL.m
標頭檔案中,暴露以下方法
2.SoapUtility 檔案是用來封裝soap訊息的。SoapUtility呼叫DDXMLElement+WSDL
在SoapUtility標頭檔案中,暴露以下方法
3.服務呼叫,上面,都把Soap訊息給準備好了。那麼最後一步就是服務的呼叫了。這裡分兩種呼叫方式:同步和非同步。
4.使用方法,下面是天氣服務的呼叫例子
//引數列表
NSDictionary *dic=@{@"theCityName": cityname};
//方法名
NSString *methodName=@"getWeatherbyCityName";
//封裝soap信封
SoapUtility *soaputility=[[SoapUtility alloc] initFromFile:@"WeatherWebService"];
NSString *postData=[soaputility BuildSoapwithMethodName:@"getWeatherbyCityName" withParas:dic];
//初始化服務
SoapService *soaprequest=[[SoapService alloc] init];
soaprequest.PostUrl=@"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx";
soaprequest.SoapAction=[soaputility GetSoapActionByMethodName:methodName SoapType:SOAP];
if (isSync) {
//同步方法
ResponseData *result= [soaprequest PostSync:postData];
[self.result setText:result.Content];
}
else{
//非同步請求
[soaprequest PostAsync:postData Success:^(NSString *response) {
[self.result setText:response];
} falure:^(NSError *response) {
[self.result setText:response.description];
}];
}
5.程式碼實現
https://github.com/xujialiang/SOAP-IOS
歡迎大家給意見。
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>