如何用IOS调用WebService(SOAP接口)
程序员文章站
2022-03-08 16:25:39
在一次项目开发过程中,用到ios调用webservice接口,所以抽个空把这方面的内容给大家整理出来,分享给大家。
方法一:使用wsdl2objc工具,将接口转成oc类。...
在一次项目开发过程中,用到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接口)的方式,希望对大家有所启迪。