资料地址:http://blog.sina.com.cn/s/blog_a30ee5f701016yn3.html
学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下载