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调用就实现了~

  • 相关阅读:
    Linux之文件处理命令
    Linux基础命令
    rip实验
    Linux基础之磁盘分区
    mysql安装
    centos Apache、php、mysql默认安装路径
    You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
    Wrong permissions on configuration file, should not be world writable!
    机器会学习么 学习总结
    实验 5 Spark SQL 编程初级实践
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3180234.html
Copyright © 2011-2022 走看看