IOS开发笔记 - 基于wsdl2objc调用webservice
为了方便在ios下调用webserivce,找来了wsdl2objc这样一个开源的框架来解析webservice方便在ios下引用。
下面做个小例子。
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:0
nice!这样一个简单的webserivce调用就实现了~
IOS开发笔记 - 基于wsdl2objc调用webservice的更多相关文章
- iOS开发笔记 基于wsdl2objc调用asp.net WebService
1.准备 先下载待会要用到的工具 WSDL2ObjC-0.6.zip WSDL2ObjC-0.7-pre1.zip 我用的是WSDL2ObjC-0.6.zip 1.1搭建asp.net WebServ ...
- iOS开发笔记--什么时候调用layoutSubviews
iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...
- IOS开发笔记 - 基于SDWebImage的网络图片加载处理
前言: 在IOS下通过URL读一张网络图片并不像Asp.net那样可以直接把图片路径放到图片路径的位置就ok, 而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示. 这里找 ...
- iOS开发笔记7:Text、UI交互细节、两个动画效果等
Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- IOS开发笔记 IOS如何访问通讯录
IOS开发笔记 IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...
- Web Service学习笔记:动态调用WebService
原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我 ...
- 【Swift】iOS开发笔记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
随机推荐
- DotNetBar.Bar控制Y顺序控制方向
DotNetBar.Bar控件Y方向上的顺序控制 老帅 控件DevComponents.DotNetBar.Bar是能够有多种用途的.能够作为容器,也能够作为工具条,不管做什么,在Y方向上 ...
- 一个解析RTSP 的URL函数
写了一个解析URL的函数,可以提取URL中的IP 和 port. 如:url = "rtsp://192.168.1.43:2554/realmp3.mp3"; url = &qu ...
- VC中添加web控件的方法
在VC中使用WebBrowser控件的两方法 黄森堂(vcmfc)著 ClassWizard方式: 1.创建包装类:View->ClassWizard->Add Class->For ...
- 动态修改PE文件图标(使用UpdateResource API函数)
PE文件的图标存储在资源文件中,而操作资源要用到的API函数就是UpdateResource首先我们需要先了解一下ICO格式,参考资料:http://www.moon-soft.com/program ...
- JavaScript + CSS3 实现的海报画廊特效
原文:JavaScript + CSS3 实现的海报画廊特效 这是慕课网上<CSS3+JS 实现超炫的散列画廊特效>的源代码,我修改了一些 bug 和调优了一些细节,并把学习过程中并不了解 ...
- 使用Delphi声明C++带函数的结构体实战 good
在小组开发中,应用程序部分采用Delphi7,一些组件使用C++做.在今天将一个动态库的C++接口声明头文件转换为D7的Unit单元时,一切都很顺利,直到遇到下面这样一个另类的东西: typedef ...
- MySQL 更新走全表和索引的评估记录数
#!/usr/bin/perl use DBI; $db_name='scan'; $ip='127.0.0.1'; $user="root"; $passwd="123 ...
- Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee)
Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee) Common Lisp第三方库介绍 一个丰富且高质量的开发库集合,对于实际 ...
- DataReader和DataSet的区别以及使用
DataReader和DataSet这两个对象都可以将检索的关系数据存储在内存中.它们在功能使用方面非常相似,但是它们不可以相互替换. 主要区别如表所示: DataReader DataSet 数 ...
- ThinkPHP中实例化对象M()和D()的区别,select和find的区别
原文:ThinkPHP中实例化对象M()和D()的区别,select和find的区别 1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在 ...