ios 调用webservice整理 + 个人针对补充

来源:互联网 发布:张爱玲小说 知乎 编辑:程序博客网 时间:2024/05/17 09:11

原文转自:http://wuchaorang.2008.blog.163.com/blog/static/488918522012101082452642/

 

学iphone开发有一段时间了,对于我这个新手来说,学习过程中,遇到不少问题,尤其是webservice的调用一直困扰了很久,赶在光棍前夕之迹,谈谈个人在webservice方面遇到的问题以及解决方案~~跟大家分享一下,对于那些高手来说可以略过~~



也不知道这是人生中的第几个光棍节了,没有妹子,很纠结,没有遇到对的人,在爱情的等待中渐渐的发霉~~~~~~~~


在这里也祝单身的男银、女银们,在光棍节脱"光"~~~~废话不多说~~切入正题


一、简述


要调用webservice你想到的是什么?


(1)写一个调用webservice的类(可以自已写,也可以下载第三方的类库)


(2)对webservice返回的xml解析(ios自带的xml解析真的很烦)


       我在网上度娘了很网,都是看到有些人,要么只提供webservice的类,简单的说明一下,对于返回的数据xml,一字不提~~~用起他们写的类来,真的很冒烟啊~~~~,网上找到的一些答案,我觉得很奇怪,大牛们经常会写一句不明不白的话,要写就写清楚,否则干脆不要写~~~让人希望又失望~~我不觉得这样有多牛B。。。反而我更喜欢把复杂的事件简单化~~~


 我个人在调用webservice时遇到几个问题:


  a.webservice的命名空间问题?


      webservice默认的命名空间是:http://tempuri.org/


     我刚开始用得好好的,后来报soapAction不识别http://tempuri.org/~~~~那天花了一上午才找出这个错,原来有人改动了webservice的默认命名空间~~~我去你大爷的,改了命名空间,也不通知我,害我瞎折腾~~


  b.xml如何解析问题?


      本来是想用ios自带的类去解析xml的,网上查了一下,看别人写了一大片,脑门一片大汗,满脸黑线~~~,后来我用的是google写的GDataXML这个类库,还不错~~~,不过对于那些xml有命名空间的如何读取,各种坛子去提问,至今还没有人正确解答我~~~难道天朝就没有人知道吗?我失望至极,后来还是有如神助般醍醐灌顶~~~自已解决了,阿门~~~~


  c.异步调用时发生400错误?


     这个问题搞得我,头脑出现乱码,神经也被打茄了,你们猜这是啥原因~~~~


    soap原本要传递的信息是这样:


      <a>XXX</a><b>XXXX</b>


    我把它传递参数颠倒过来了,变成这样:


     <b>XXX</b><a>XXX</a>


     发现问题后,我傻楞般的笑了~~~~


  二、类的简要说明


(1)webservice(一个是使用NSURLConnection写的类,还有一个是ASIHttpRequest写的webservice调用类)


  a.同步调用


  b.异步调用


  c.返回数据的处理


     soap调用返回的数据经常放在:<webservice方法名Result>XXX</webservice方法名Result>中,我在webservice调用中已经直接提取出来了~~~提取出来的内容还是一个xml,这段内容的处理,我单独写在xml解析类里面


(2)xml解析类


 1.读取<方法名Result>XXX</方法名Result>的内容


 2.遍历xml的所有内容返回数组


三、使用配置


  (1)使用NSURLConnection写的webservice调用类,类名叫:WebServices.h


     包含的文件如下:




     a.AppConfigure.h文件的配置:




  b.google GDataXml配置如下:


     step1.先添加libxml2.dylib类库,不要告诉我这个都不会,拉去面壁~~~


     step2.操作如下图所示




 


  (2)借助ASIHttpRequest写的webservice调用类,类名叫:ServiceHelper.h


    跟(1)的配置一样,这里就不再重复说明,ASIHttpRequest要多添加几个类库,如下图所示



 四、文件下载


  (1)NSURLConnection类写的webservice调用类的所有文件下载


      http://dl.vmall.com/c0cld6ey99 [注:请下载demo里面的最新版本,有调整]


  (2)ASIHttpRequest类写的webservice调用类的所有文件下载


     http://dl.vmall.com/c0gx4evjva  [注:请下载demo里面的最新版本,有调整]


 五、demo下载
   

 


demo下载地址:http://dl.vmall.com/c016bva6aw



相关问题:

1.为什么使用了上文代码的人传入自己的配置信息后,发现返回的数据是不带xml标签的:

原因如下:当网络数据回来之后,被作者自己的xml解析器弄丢了(具体为啥丢了,我没有仔细去看代码)

所以如果使用上文代码,你需要自己取出 网络下载的NSData,然后自己去使用NSXmlParse解析

我修改后的文件如下:不完整demo:在作者的代码基础上,加入了IOS自带的xml标签解析(解析时另外起一个线程,防止解析过于耗时)(见我的资源)

原创粉丝点击