当前位置: 移动技术网 > 移动技术>移动开发>IOS > 如何用IOS调用WebService(SOAP接口)

如何用IOS调用WebService(SOAP接口)

2019年07月24日  | 移动技术网移动技术  | 我要评论

在一次项目开发过程中,用到ios调用webservice接口,所以抽个空把这方面的内容给大家整理出来,分享给大家。

方法一:使用wsdl2objc工具,将接口转成oc类。

1.在浏览器中输入webservice接口地址(safari不可用,我用的是firefox),如:, 地址后面添加上.wsdl成打开。

2.将页面另存为wsdl文件,保存的时候后缀加上.wsdl,保存成如xxxxservice.asmx.xml.wsdl。

3.使用wsdl2objc工具将wsdl文件转成oc类。

4.将生成的oc类的全部文件导入到项目中。然后就可以调用了。现在没有写demo,我就贴一部分调用代码,以后有机会传个demo上来。

- (nsstring *)skhkshlistofpagenow2:(nsinteger)apagenow pagesize:(nsinteger)apagesize {
   
  murpxzshservicesoapbinding *binding = [[murpxzshservicesoapbinding alloc]initwithaddress:[nsstring stringwithformat:@"%@%@", self.jjjj, xzsh_service]];//接口地址
  binding.logxmlinout = yes;//可以直接copy
  murpxzshservice_hkshlist *parm = [[murpxzshservice_hkshlist alloc] init];//接口中方法初始化
  parm.xxxx = [umcid stringvalue];//接口中方法传参数
  parm.pagenow = [nsnumber numberwithinteger:apagenow];//接口中方法传参数
  parm.pagesize = [nsnumber numberwithinteger:apagesize];//接口中方法传参数
  murpxzshservicesoapbindingresponse *resp = [binding hkshlistusingparameters:parm];//调用方法
   
  //下面是返回值
  for (id mine in resp.bodyparts) {
   
    if ([mine iskindofclass:[murpxzshservice_hkshlistresponse class]]) {
       
      nsstring *resultstr = [mine hkshlistresult];
       
      return resultstr;
    }
  }
  return nil;
}

 注意:上面我的webservice名字是murpxzshservice,soap是murpxzshservicesoapbinding,调用的方法是hkshlist。

方法二:直接通过网络请求调用,解析xml的方法。

不说了,先上代码:

- (void)viewdidappear:(bool)animated {
   
  [super viewdidappear:animated];
   
  //假如在这开始请求
  nsstring *webservicebodystr = [nsstring stringwithformat:
                  @"<jsjy_yjy xmlns=\"http://murpcn.com/murpwebservice/\">"
                  "<xxx>34192</xxx>"
                  "<pagenow>1</pagenow>"
                  "<pagesize>20</pagesize>"
                  "</jsjy_yjy>"];//这里是参数
  nsstring *webservicestr = [nsstring stringwithformat:
                @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                "<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/\">\n"
                "<soap:body>\n"
                "%@\n"
                "</soap:body>\n"
                "</soap:envelope>",
                webservicebodystr];//webservice头
   
  nsstring *soapactionstr = [nsstring stringwithformat:@"http://xxx.com/murpwebservice/%@", @"jsjy_yjy"];//soapaction
   
  nsurl *url = [nsurl urlwithstring:@"http://xxxx/key/murpjsjyservice.asmx"];
  nsmutableurlrequest *therequest = [nsmutableurlrequest requestwithurl:url];
  nsstring *msglength = [nsstring stringwithformat:@"%ld", webservicestr.length];
  [therequest addvalue:@"text/xml; charset=utf-8" forhttpheaderfield:@"content-type"];
  [therequest addvalue:soapactionstr forhttpheaderfield:@"soapaction"];
  [therequest addvalue:msglength forhttpheaderfield:@"content-length"];
  [therequest sethttpmethod:@"post"];
  [therequest sethttpbody:[webservicestr datausingencoding:nsutf8stringencoding]];
  nsurlconnection *theconn = [[nsurlconnection alloc] initwithrequest:therequest delegate:self];
  if (theconn) {
     
    nslog(@"8888哈哈哈笑");
  }else {
    nslog(@"5555你给我哭");
  }
}
 //接收到数据的代理

- (void)connection:(nsurlconnection *)connection didreceiveresponse:(nsurlresponse *)response {
   
   
}
 
- (void)connection:(nsurlconnection *)connection didreceivedata:(nsdata *)data {
   
  nsstring *str = [[nsstring alloc] initwithdata:data encoding:nsutf8stringencoding];
  nslog(@"%@", str);//得到想要的xml字符串然后解析
   
  //系统自带的
  nsxmlparser *par = [[nsxmlparser alloc] initwithdata:[str datausingencoding:nsutf8stringencoding]];
  [par setdelegate:self];//设置nsxmlparser对象的解析方法代理
  [par parse];//调用代理解析nsxmlparser对象,看解析是否成功
}
//解析xml

#pragma mark xmlparser
//step 1 :准备解析
- (void)parserdidstartdocument:(nsxmlparser *)parser{
   
   
}
//step 2:准备解析节点
- (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qname attributes:(nsdictionary *)attributedict{
  nslog(@"%@", nsstringfromselector(_cmd) );
}
//step 3:获取首尾节点间内容
- (void)parser:(nsxmlparser *)parser foundcharacters:(nsstring *)string{
  nslog(@"%@", string);
}
 
//step 4 :解析完当前节点
- (void)parser:(nsxmlparser *)parser didendelement:(nsstring *)elementname namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qname{
  nslog(@"%@",nsstringfromselector(_cmd) );
}
 
//step 5;解析结束
- (void)parserdidenddocument:(nsxmlparser *)parser{
   
}
//获取cdata块数据
- (void)parser:(nsxmlparser *)parser foundcdata:(nsdata *)cdatablock{
   
}

以上内容就是用ios调用webservice(soap接口)的方式,希望对大家有所启迪。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网