1.准备

先下载待会要用到的工具 WSDL2ObjC-0.6.zip WSDL2ObjC-0.7-pre1.zip

我用的是WSDL2ObjC-0.6.zip

1.1搭建asp.net WebService项目并且部署在IIS服务器上面

创建WebService服务项目后先在Web.config添加节点,设置WebService远程调试访问,否则会出现:

“测试窗体只能用于来自本地计算机的请求”

<webServices>
<protocols>
<add name="HttpSoap" />
<add name="HttpPost" />
<add name="HttpGet" />
<add name="Documentation" />
</protocols>
</webServices>

View Code

创建类库添加Model实体类

public class CourseEntity
{private int courseID;public int CourseID{get { return courseID; }set { courseID = value; }}private int parentID;public int ParentID{get { return parentID; }set { parentID = value; }}private string courseName;public string CourseName{get { return courseName; }set { courseName = value; }}private string coursePPT;public string CoursePPT{get { return coursePPT; }set { coursePPT = value; }}private string courseVidio;public string CourseVidio{get { return courseVidio; }set { courseVidio = value; }}}

View Code

事先做好Model实体类的生成dll文件,直接添加引用至bin目录下

在项目当中添加一个数据库操作类DBOperation.cs

接下来我们打开Service.cs文件。

2.asp.net WebService返回Xml Json格式数据

2.1返回Xml格式数据

service.cs代码如下:

  [WebMethod(Description = "ProblemPaper")]public List<ProblemPaperEntity> ProblemPaper(String prkid){return dbOperation.ProblemPaper(prkid);}

View Code

DBOperation.cs代码如下:

/// <summary>/// 题库试卷目录表 ProblemPaper/// </summary>/// <returns>PPID(编号)PRKID(上一级)PTID(类型编号)Name(名称)ProblemNum(目录数量))</returns>public List<ProblemPaperEntity> ProblemPaper(String prkid){List<ProblemPaperEntity> list = new List<ProblemPaperEntity>();ProblemPaperEntity model = null;try{string sql = "select PPID,PRKID,PTID,Name,ProblemNum,Row_Number() over(order by PPID ) as row_number from ProblemPaper where 1=1";sql += "  and prkid in ( select * from getProblemResourseByID("+prkid+"))";string s = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;SqlConnection con = new SqlConnection(s);con.Open();SqlCommand cmd = new SqlCommand(sql, con);SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){model = new ProblemPaperEntity();model.PPID = reader.GetInt32(0);model.PRKID = reader.GetInt32(1);model.PTID = reader.GetInt32(2);model.Name = reader.GetString(3);model.ProblemNum = reader.GetInt32(4);list.Add(model);}reader.Close();cmd.Dispose();}catch (Exception){}return list;}

View Code

从service.cs代码中可以看到ProblemPaper方法前面 [WebMethod]指示web服务提供的方法

public方法能否被调用者访问取决于这个方法是否是一个“WebMethod”,在编写方法的时候注意

方法前面是否含有WebMethod

2.2返回Json格式数据

service.cs 代码如下:

[WebMethod(Description = "JsonProblemPaper2")][ScriptMethod(ResponseFormat = ResponseFormat.Json)]public string JsonProblemPaper2(String prkid){return new JavaScriptSerializer().Serialize(dbOperation.ProblemPaper(prkid));}

View Code

DBOperation.cs代码如下:

public List<string> JsonProblemPaper(String prkid){List<String> list = new List<String>();try{string sql = "select PPID,PRKID,PTID,Name,ProblemNum,Row_Number() over(order by PPID ) as row_number from ProblemPaper where 1=1";sql += "  and prkid in ( select * from getProblemResourseByID(" + prkid + "))";string s = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;SqlConnection con = new SqlConnection(s);con.Open();SqlCommand cmd = new SqlCommand(sql, con);SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){list.Add(reader[0].ToString());list.Add(reader[1].ToString());list.Add(reader[2].ToString()) ;list.Add(reader[3].ToString());list.Add(reader[4].ToString());}reader.Close();cmd.Dispose();}catch (Exception){}return list;}

View Code

返回Json格式,需要在方法前面同时声明

[WebMethod(Description = "××××")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

返回格式: return new JavaScriptSerializer().Serialize(dbOperation.ProblemPaper(prkid));

接下来的方法编写由自己扩展,编写完WebService

 3.部署

环境windows Server2008 IIS 7.5  SqlServer2012

选择应用程序池.Net v.2.0,切记,如在部署遇到问题可以查阅其他相关资料,在这里

就不多详细

 4.IOS基于wsdl2objc调用asp.net WebService

4.1使用wsdl2objc工具

在官网上下载有2个版本,我用的是WSDL2ObjC-0.6.zip,

部署完毕后,打开wsdl2objc

Parse WSDL后稍等15秒左右出现Finish!查看导入目录

将生成的所有文件放置在wsdl2objc文件夹

尝试编译出现错误如下:

解决方法:这里有2个错误

1."libxml/tree.h" file not found

2.ARC开启与禁止

第一个错误解决方法如下:

支持libxml2

TARGETS -> Build Settings -> Linking -> Other Linker Flags,设置“-lxml2”

TARGETS -> Build Settings -> Search Paths-> Header Search Paths,设置“/usr/include/libxml2”

TARGETS -> Build Settings -> Apple LLVM5.0-Language-Objective C> Objective-C Automatic Reference Counting,设置“No”

 第二个错误解决方法:

TARGETS -> Build Settings ->All 搜索"compiler"

Apple LLVM 5.0- Custom CompilerFlags OtherWaning Flags 设置"-Wall"

打开Xcode的自动转换工具

错误解决后,项目就可以完整的运行了,在第一个错误当中我花的时间有些多,

如果你在做的过程当中遇到这个错误

请重新尝试再做看上面二个错误的解决方法,在第二个错误记得一次性转换ARC

在项目当中还会用到手动设置ARC

手动ARC设置方法如下:

1.在Compiler Flags一列加上-fno-objc-arc就表示禁止这个.m文件的ARC

2.在Compiler Flags一列加上-fobjc-arc就表示开启这个.m文件的ARC

参考资料:http://blog.csdn.net/a283127993/article/details/11082179

http://blog.csdn.net/q199109106q/article/details/8565403

5. IOS客户端解析xml,json数据

接下来详细说明如何解析xml,json,往往遇到问题我就花了就是整整一天时间来做

5.1 IOS客户端解析xml无参数据

代码如下:

-(void)getXml{NSMutableArray *result;
ServiceSoap12Bingding *binding =[Service ServiceSoap];
Service_Course *request = [[Service_Course alloc] init];ServiceSoap12BindingResponse *response = [binding CourseUsingParameters:request];
for(id mine in response.bodyParts){if([mine isKindOfClass:[Service_CourseResponse class]])
{[request  release];result = [mine CourseResult].CourseEntity;}
for(Service_CourseEntity *t in result){NSLog(@"ID:%d ParentID:%d CourseName:%@ CoursePPT:%@ CourseVidio:%@",[t.CourseID intvalue],
[t.ParentID intvalue],t.CourseName,t.CoursePPT,t.CourseVidio
);
}}         }

View Code

5.2 IOS客户端解析xml有参数数据

-(void)getXml2{NSMutableArray *result;
ServiceSoap12Bingding *binding =[Service ServiceSoap];
Service_ProblemPaper *request = [[Service_ProblemPaper alloc] init];
request.prkid=@"1";ServiceSoap12BindingResponse *response = [binding ProblemPaperUsingParameters:request];
for(id mine in response.bodyParts){if([mine isKindOfClass:[Service_ProblemPaperResponse class]])
{[request  release];result = [mine ProblemPaperResult].ProblemPaperEntity;}
for(Service_CourseEntity *t in result){NSLog(@"PPID:%d],
[t.PPID intvalue]);
}}  

View Code

代码如下:

5.3 IOS客户端解析json有参数据

代码如下:

-(void)getJson{NSMutableArray *result;NSData*data;
ServiceSoap12Bingding *binding =[Service ServiceSoap];
Service_JsonProblemPaper2 *request = [[Service_JsonProblemPaper2 alloc] init];
request.prkid=@"1";ServiceSoap12BindingResponse *response = [binding JsonProblemPaper2UsingParameters:request];
for(id mine in response.bodyParts){if([mine isKindOfClass:[Service_JsonProblemPaper2Response class]])
{[request  release];result = [mine JsonProblemPaper2Result] ;data= [result dataUsingEncoding:NSUTF8StringEncoding];NSLog(@"data:%@",data);  NSDictionary *dict =[NSjSONSerialization JSONbjectWithData:data  options:NSJSONReadingAllowFragmentS error:nil];
if(dict == nil)
{return ;
}
else{for(NSString *ds in dict){NSLog(@"json%@",[ds objectForKey:@"Name"]);}
}
}} 

View Code

在这里我只对解析json有参数据说明,在这里我遇到不少问题,花的时间挺多的,

IOS客户端解析xml有参数数据,IOS客户端解析xml有参数数据

参考代码就可以实现,在解析json有参数据,遇到了几个问题,

就几行代码也花了好久,断断续续抽出时间做,最后才完成,下面是如何将NSString

最后完整的放入NSDictionary,并且取出相应的键值,result是返回类型的数据

将NSString转化为NSData

[result dataUsingEncoding:NSUTF8StringEncoding];

将result类型的数据,转成UTF8的数据

首先我们将result类型的数据,转成UTF8的数据

将JSON串转化为字典

苹果引入了一个解析JSON串的NSJSONSerialization类。
通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化

开始的时候想将返回的NSString数据转化为NSDictionary即NSString-NSDictionary返回的数据为null

所以采用NSString-NSData-NSDictionary最后成功解决数据为null问题,数据成功拿到Name属性值和其他属性值

在这里我只打印Name属性值

6.总结

该博文面向初学者,大牛请不要喷。写到这里,又复习了好多知识,遇到之前没发现的错误,但是耐心下来,问题总会解决,

 WebService和客户端源码有需要的话可以留下邮箱,既然来了,对你有帮助,推荐支持一下呗!

http://www.cnblogs.com/linmingjun/p/4382565.html 作者

转载于:https://www.cnblogs.com/linmingjun/p/4382565.html

iOS开发笔记 基于wsdl2objc调用asp.net WebService相关推荐

  1. iOS开发笔记--基于面向协议MVP模式下的软件设计

    传统模式下的开发 MVC MVVM 基于面向协议MVP的介绍 MVP实战开发 说在前面:  相信就算你是个iOS新手也应该听说过MVC的,MVC是构建iOS App的标准模板.随着时间的推移,在iOS ...

  2. IOS开发笔记 - 基于SDWebImage的网络图片加载处理

    前言: 在IOS下通过URL读一张网络图片并不像Asp.net那样可以直接把图片路径放到图片路径的位置就ok, 而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示. 这里找 ...

  3. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h"st ...

  4. IOS开发笔记之推广安装(用网页判断是否安装App)

    IOS开发笔记之推广安装(用网页判断是否安装App) 在做App推广的时候,我们经常会用到网页链接下载,亦或是一张二维码,最常见的做法就是将App在iTunes中的下载链接嵌入,当用户扫描或者点击网页 ...

  5. php soap调用asp.net webservice

    php soap调用asp.net webservice 原文:php soap调用asp.net webservice 首先做一下准备工作,找到安装环境里的php.ini把;extension=ph ...

  6. iOS开发笔记--iOS应用架构谈 view层的组织和调用方案

    前言 <iOS应用架构谈 开篇>出来之后,很多人来催我赶紧出第二篇.这一篇文章出得相当艰难,因为公司里的破事儿特别多,我自己又有点私事儿,以至于能用来写博客的时间不够充分. 现在好啦,第二 ...

  7. IOS开发笔记之常用的第三方库(太多了。)

    图像: 1.图片浏览控件MWPhotoBrowser  实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. ...

  8. iOS开发笔记 - 界面调试神器Reveal

    http://blog.csdn.net/jackfrued/article/details/50934092 Reveal是iOS开发工具中的神器之一,它能够在应用程序运行过程中调试应用程序界面. ...

  9. iOS开发笔记 - 网络篇

    计算机网络基础   计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享.   如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物. ...

最新文章

  1. 在线阅读计算机组成,计算机组成原理RAM.pdf
  2. 团队在Github上协同开发项目流程
  3. 在Linux系统的命令行中为MySQL创建用户的方法
  4. 数据中心细节_当细节很重要时数据不平衡
  5. php控制器实现自动映射,PHP实现路由映射到指定控制器
  6. 在写新邮件时,在地址栏中敲入前几个字母,对于已熟悉的收件人,outlook会弹出列表...
  7. java贝叶斯分类器 开源_贝叶斯分类器
  8. 【Oracle】ORA-55610: Invalid DDL statement on history-tracked table
  9. 考试倒计时,计算机二级重难点汇总【39套历年考题】
  10. Android中识别手柄JAVA_android的游戏手柄开发测试代码
  11. Unity Shader·科技感描边效果(利用Robert算子边缘检测)
  12. 《奈何BOSS要娶我》将播 制片人:做了很多反套路的改编
  13. [置顶] [VS2010]逸雨清风 永久稳定音乐外链生成软件V0.1
  14. 基于S变换的电压暂降检测研究及仿真设计
  15. 大数据仓库技术实训任务2
  16. C++ 成员模板(member template)
  17. iOS:iPhone手机分辨率、尺寸、导航栏尺寸、Tabbar尺寸对比(菜鸟教程)
  18. 2022年,我的读书计划
  19. java读取docx_POI读写Word docx文件
  20. 对于微机用户来说 为了防止计算机,计算机二级MSOffice考试巩固习题

热门文章

  1. java获取动态天气api,java调用中国天气网api获得天气预报信息
  2. 华中师范大学邮箱matlab,正版软件管理与服务平台(华中师范大学)
  3. 单总线和i2c总线结合实现数字温度计的设计c语言程序,1《单片机原理应用》课程设计指导书2010-6-8.doc...
  4. java网页统计访客量_Java中的访客设计模式
  5. python 并发_Python bin()
  6. Python Shutil模块
  7. 迅捷cad_迅捷协议
  8. r求矩阵某一列的标准偏差_如何在R中找到标准偏差?
  9. java反射用法示例_Java反射示例教程
  10. cocos bubbles_像Messenger Bubbles这样的Android浮动小部件