IOS开发笔记 - 基于wsdl2objc调用webservice
2013-07-09 11:25
489 查看
为了方便在ios下调用webserivce,找来了wsdl2objc这样一个开源的框架来解析webservice方便在ios下引用。
下面做个小例子。
1.首先是用Asp.net搭建一个测试的webserivce并放在IIS服务器上面
核心代码如下: 返回一个TTT的泛型集合
//数据加载重新优化
2.下载wsdl2objc,并用wsdl2objc这个工具去对webservice进行解析,得到一份代码。
wsdl2objc使用也是比较简单的,我把webserivce寄托在局域网内末IP为241端口为24的机子上,
第二行放入的路径就是要生成代码的文件路径 /Users/lenbol/Desktop/NiceTesttt/NiceTesttt/Service,
然后点击Parse WSDL, 待程序出现Finished!字样时,在我的NiceTesttt项目下的Service文件下就生成出了一些代码,
选中的文件是工具自动生成的,其中WebSerivce文件是把wsdl解析好的关键性文件,Produce也是一个服务,其他的文件是每次生成附带的通用文件。
3.为了对WebService更好地管理,因此建立了一个WebSerivceManager去处理一些逻辑问题。
WebSerivceManager中写一个方法去调用webserivce并用NSLog暴露调试输出调用结果。
关键代码:
在这个方法中可以看到,开始NSMutableArray *result ;是建立一个可变数据为结果做准备。
然后WebServiceSoap12Binding *binding = [WebService WebServiceSoap12Binding];是建立一个soapbinding的对象。
接下来WebService_getT *request = [[WebService_getT alloc]init];是建立一个request的对象,这个对象可以放入传入的参数,由于测试的服务无参数,在这个对象中也就不用传入参数,但为了调用服务,还是必须声明这个对象不然会报错的~
接着就是用一个soap12bindingResponse的对象去处理结果 并循环遍历把结果赋值给开始声明的可变数组result,最后循环输出结果。
调用getTTT:
下面做个小例子。
1.首先是用Asp.net搭建一个测试的webserivce并放在IIS服务器上面
核心代码如下: 返回一个TTT的泛型集合
//数据加载重新优化
[WebMethod(Description = "TypeTest for ios")] public List<TTT> getT() { List<TTT> ts = new List<TTT>(); for (int i = 1; i <= 9; i++) { TTT t = new TTT(); t.name = "x" + i; t.id = i; t.pid = 0; ts.Add(t); } return ts; }
2.下载wsdl2objc,并用wsdl2objc这个工具去对webservice进行解析,得到一份代码。
wsdl2objc使用也是比较简单的,我把webserivce寄托在局域网内末IP为241端口为24的机子上,
第二行放入的路径就是要生成代码的文件路径 /Users/lenbol/Desktop/NiceTesttt/NiceTesttt/Service,
然后点击Parse WSDL, 待程序出现Finished!字样时,在我的NiceTesttt项目下的Service文件下就生成出了一些代码,
选中的文件是工具自动生成的,其中WebSerivce文件是把wsdl解析好的关键性文件,Produce也是一个服务,其他的文件是每次生成附带的通用文件。
3.为了对WebService更好地管理,因此建立了一个WebSerivceManager去处理一些逻辑问题。
WebSerivceManager中写一个方法去调用webserivce并用NSLog暴露调试输出调用结果。
关键代码:
-(void)getTTT { NSMutableArray *result ; WebServiceSoap12Binding *binding = [WebService WebServiceSoap12Binding]; WebService_getT *request = [[WebService_getT alloc]init]; WebServiceSoap12BindingResponse *respone=[binding getTUsingParameters:request]; for(id mine in respone.bodyParts) { if([mine isKindOfClass:[WebService_getTResponse class]]) { [request release]; result=[mine getTResult].TTT; } } for(WebService_TTT* t in result) { NSLog(@"name: %@ id:%d - pid:%d ",t.name,[t.id_ intValue] ,[t.pid intValue]); } }由于在.net下服务方法返回的是一个LIST集合,在IOS下需要用用一个可变数组(NSMutableArray)去接收结果。
在这个方法中可以看到,开始NSMutableArray *result ;是建立一个可变数据为结果做准备。
然后WebServiceSoap12Binding *binding = [WebService WebServiceSoap12Binding];是建立一个soapbinding的对象。
接下来WebService_getT *request = [[WebService_getT alloc]init];是建立一个request的对象,这个对象可以放入传入的参数,由于测试的服务无参数,在这个对象中也就不用传入参数,但为了调用服务,还是必须声明这个对象不然会报错的~
接着就是用一个soap12bindingResponse的对象去处理结果 并循环遍历把结果赋值给开始声明的可变数组result,最后循环输出结果。
调用getTTT:
2013-07-09 10:03:02.128 NiceTesttt[1016:c07] name: x1 id:1 - pid:0 2013-07-09 10:03:02.130 NiceTesttt[1016:c07] name: x2 id:2 - pid:0 2013-07-09 10:03:02.130 NiceTesttt[1016:c07] name: x3 id:3 - pid:0 2013-07-09 10:03:02.130 NiceTesttt[1016:c07] name: x4 id:4 - pid:0 2013-07-09 10:03:02.131 NiceTesttt[1016:c07] name: x5 id:5 - pid:0 2013-07-09 10:03:02.131 NiceTesttt[1016:c07] name: x6 id:6 - pid:0 2013-07-09 10:03:02.131 NiceTesttt[1016:c07] name: x7 id:7 - pid:0 2013-07-09 10:03:02.172 NiceTesttt[1016:c07] name: x8 id:8 - pid:0 2013-07-09 10:03:02.175 NiceTesttt[1016:c07] name: x9 id:9 - pid:0nice!这样一个简单的webserivce调用就实现了~
相关文章推荐
- IOS开发笔记 - 基于wsdl2objc调用webservice
- iOS开发笔记--调用iPhone的短信、地图、电话、邮件、浏览器
- iOS开发笔记--什么时候调用layoutSubviews
- iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)
- delphi xe4 开发ios 应用调用webservice
- iOS开发笔记8--基于XMPP协议的手机多方多端即时通讯方案
- iOS陆哥开发笔记(二十四) (C语言之内存四区和函数调用模型)
- iOS开发笔记--OC工程中调用不了Swift代码
- ios开发笔记-循环调用/执行一个方法
- iOS开发笔记--什么时候调用layoutSubviews
- iOS海哥开发笔记 (海哥原创,C语言之内存四区模型和函数调用模型)
- IOS开发笔记 - 基于SDWebImage的网络图片加载处理
- iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)
- iOS开发笔记之六十四——基于UIView模块化组件方案
- iOS开发笔记之六十六——基于Json的页面动态化方案
- IOS开发笔记 - 基于SDWebImage的网络图片加载处理
- [Android初级]调用基于WCF开发的WebService出现的问题
- iOS开发笔记--iOS应用架构谈 view层的组织和调用方案
- IOS开发笔记 - 基于SDWebImage的网络图片加载处理
- iOS学习笔记77-ios开发,javascript直接调用oc代码而非通过改变url回调方式