zoukankan      html  css  js  c++  java
  • IOS 调用WebService(同步和异步)

    因为公司的服务全都是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


    201307270824.jpg

    头文件中,暴露以下方法


    201307270825.jpg

    2.SoapUtility 文件是用来封装soap消息的。SoapUtility调用DDXMLElement+WSDL

    在SoapUtility头文件中,暴露以下方法


    201307270825.jpg

    3.服务调用,上面,都把Soap消息给准备好了。那么最后一步就是服务的调用了。这里分两种调用方式:同步和异步。


    201307270826.jpg

    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

    欢迎大家给意见。

  • 相关阅读:
    帮助C#菜鸟进入SQL/XML开发
    汉字转换为拼音的函数
    水晶报表的使用技巧
    用DataSet操作XML
    frame,iframe,frameset 的区别(来源网络)
    oracle 数据库锁表解决方法
    c#日期类型的使用 (转)
    深入了解ViewState 深入了解ViewState
    js中top、parent、frame
    SQL中 inner join、 left join 、right join、 outer join之间的区别(来自百度自用)
  • 原文地址:https://www.cnblogs.com/danye/p/3218832.html
Copyright © 2011-2022 走看看