zoukankan      html  css  js  c++  java
  • IOS开发笔记


    为了方便在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调用就实现了~

  • 相关阅读:
    属性选择器(通常用在input)
    函数调用的文档注释
    List集合操作
    数组排序三种方法
    字符串反序输出字符串
    js中完美运动框架
    查找100-200之间是否存在水仙花数
    提示用户输入一个正整数,如果错误,则重新输入,可以使用以下的代码来保证用户输入正确:
    Ubuntu 16.10下的 jdk 1.8.0_111
    方法内部类
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3180234.html
Copyright © 2011-2022 走看看