ios调用webservice对wsdl二元次图解说明

ios请求webservice几种方式

(1)回传soap字符串进行请求

(2)http://xxx/方法名/参数名=参数值 ===>这种方式请求

基于很多新手都对wsdl都不认识,又谈何请求,更别提soap字符串了,我在这里主要图解说明如何拼凑soap字符串进行请求

一.命名空间在根目录上

    (1)soap字符串格式如下: (注:只有文字部分才要修改,非文字部份都是固定的)

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:前缀名(如:ns1)="webservice命名空间">
    <soap:Header>

     <!----头内容----->
    </soap:Header>
    <soap:Body>
        <前缀名:方法名>
            <参数名1>参数值1</参数名1>
            <参数名2>参数值2</参数名2>
            .......
        </前缀名:方法名>
    </soap:Body>
</soap:Envelope>

   a.soap:Header有请求头就加上,没上就可去悼soap:Header节点
   b.如果调用方法没有参数,则改成<前缀名:方法名></前缀名:方法名>
(2)以http://policy.mofcom.gov.cn/webservice/ClawWS?wsdl  做为参考图解说明
  a.以我们要调用simpleQuery方法为例,则soap字符串为:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webservice.modules.springside.org">
    <soap:Header>
        <authHeader>
            <userId>wanfang</userId>
            <userPass>wanfang</userPass>
        </authHeader>
    </soap:Header>
    <soap:Body>
        <ns1:simpleQuery>
            <queryString>法律</queryString>
            <section>all</section>
            <pageNo>1</pageNo>
        </ns1:simpleQuery>
    </soap:Body>
</soap:Envelope>

 

 

 

 

 

 

 

  
 
b.图解说明

 

 

二.命名空间在方法名上 
(1)soap字符串格式如下: (注:只有文字部分才要修改,非文字部份都是固定的)

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

 <soap:Header>

     <!----头内容----->
  </soap:Header>  <soap:Body>    <方法名 xmlns="webservice命名空间">      <参数1>参数值1</参数1>      <参数2>参数值2</参数2>

     .....    </方法名>

 </soap:Body></soap:Envelope>

 a.soap:Header有请求头就加上,没上就可节点
 b.如果调用方法没有参数,则改成<方法名 xmlns="webservice命名空间"></方法名>
 
(2)以http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx?wsdl  进行图解说明

      a.我们要调用getStockInfo方法,则soap字符串为:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getStockInfo xmlns="http://webxml.com.cn/">
      <theStockCode>参数值1</theStockCode>
      <userID>参数值2</userID>
    </getStockInfo>
</soap:Body>
</soap:Envelope>

  b.图解说明

ios调用webservice对wsdl二元次图解说明 - wuchaorang.2008 - rang

 

 

三.ios调用webservice

 

NSString *soapMsg=@"我们拼成的soap字符串";

NSString *space=@"webservice命名空间";

NSString *methodname=@"要调用的方法名";

NSURL *url=[NSURL URLWithString:@"webservice地址"];
    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];
    NSString *soapAction=[NSString stringWithFormat:@"%@%@",space,methodname];
    //头部设置
    NSDictionary *headField=[NSDictionary dictionaryWithObjectsAndKeys:[url host],@"Host",
                             @"text/xml; charset=utf-8",@"Content-Type",
                             msgLength,@"Content-Length",
                             soapAction,@"SOAPAction",nil];
    [request setAllHTTPHeaderFields:headField];
    //超时设置
    [request setTimeoutInterval: 30 ];
    //访问方式
    [request setHTTPMethod:@"POST"];
    //body内容
    [request setHTTPBody:[soapMsg dataUsingEncoding:NSUTF8StringEncoding]];


注:

   a.有些webservice调用需要设SOAPAction,有些则不要,要就加上,不要就去悼

   b.如果用第一种[命名空间在根目录上]方式生成的soap字符串调用会有错,则用第二种[命名空间在方法名上]生成的字符串调用

  c.还是不行,请教写webservice接口的人员,找不到人,只能自已琢磨了


转载于:https://my.oschina.net/u/554222/blog/268290

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值