iPhone中调用WCF RESTful Service
创始人
2024-07-27 07:11:37
0

在前面我们介绍过跨平台iPhone中调用WCF服务,讲述的如何在iPhone中调用WCF服务。我现在开发是调用webService的,方式和那篇文章一样。需要定义soap,然后异步去调用服务端的方法,等服务端执行完成,然后在iPhone客户端接受返回的XML,***解析返回的XML。这种方式用起来非常的不方便,每一次调用即需要写自定义的soap,又要解析XML。这篇文章我将讲述一下如何调用RESTful方式的WCF服务。

REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。使用WCF创建RESTful分格的服务是非常方便的。这篇文章,我通过一个demo来展示如何在iPhone中调用WCF RESTful Service。

创建一个WCF RESTful Service。

1、创建一个数据交换实体类

  1. ///   
  2. /// User实体类  
  3. ///   
  4. [DataContract]  
  5. public class User  
  6. {  
  7.     ///   
  8.     /// 用户名  
  9.     ///   
  10.     [DataMember(Order = 0)]  
  11.     public string Name { get; set; }  
  12.     ///   
  13.     /// 生日  
  14.     ///   
  15.     [DataMember(Order = 1)]  
  16.     public string DayOfbirth { get; set; }  

2、服务契约:定义了三个方法,分别用来获取用户的XML格式、json格式以及创建用户。

  1. [ServiceContract]  
  2. public interface IService1  
  3. {  
  4.     ///   
  5.     /// 创建用户  
  6.     ///   
  7.     ///   
  8.     /// 获取用户信息,json格式  
  9.     ///   
  10.     /// 用户名  
  11.     [OperationContract]  
  12.     [WebGet(  
  13.         UriTemplate = "User/{name}",  
  14.         ResponseFormat = WebMessageFormat.Json)]  
  15.     User GetUser(string name);  
  16.     ///   
  17.     /// 获取用户信息,XML格式  
  18.     ///   
  19.     /// 用户名  
  20.     ///   
  21.      ///   
  22.     [OperationContract]  
  23.     [WebGet(  
  24.         UriTemplate = "UserXML/{name}",  
  25.         ResponseFormat = WebMessageFormat.Xml)]  
  26.     User GetUserXML(string name);  
  27.     ///   
  28.     /// 创建用户信息  
  29.     ///   
  30.     /// 用户名  
  31.     /// 生日  
  32.     ///   
  33.     [OperationContract]  
  34.     [WebInvoke(UriTemplate = "User/{name}/{dayOfbirth}",  
  35.         Method = "POST",  
  36.         ResponseFormat = WebMessageFormat.Json)]  
  37.     User CreateUser(string name, string dayOfbirth);  
  38.    } 

3、服务实现:这里简单处理。

  1. public class Service1 : IService1  
  2. {  
  3.     public User GetUser(string name)  
  4.     {  
  5.         return new User { Name = name, DayOfbirth = new DateTime(1986, 10, 23).ToString() };  
  6.     }  
  7.     public User GetUserXML(string name)  
  8.     {  
  9.         return new User { Name = name, DayOfbirth = new DateTime(1986, 10, 23).ToString() };  
  10.     }  
  11.     public User CreateUser(string name, string dayOfbirth)  
  12.     {  
  13.         return new User { Name = name, DayOfbirth = dayOfbirth };  
  14.     }  

4、对于vs2008创建的wcf服务,需要在.svc文件中加入下面代码:

  1. Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

5、在web.config中将绑定方式改成webHttpBinding

6、在iis发布服务。

iPhone客户端调用:

这里使用ASIHTTPRequest,它是一个直接在CFNetwork上做的开源项目,提供了一个比官方更方便更强大的HTTP网络传输的封装,非常的好用。

在xcode中拖一个简单的界面,如下图,分别调用服务端的三个方法:

定义下面三个方法与三个button的点击事件对应:

  1. - (IBAction)fetchXML:(id)sender;  
  2. - (IBAction)fetchJson:(id)sender;  
  3. - (IBAction)createJson:(id)sender; 

三个点击事件的具体实现:下面的代码为了简单起见,直接将xml和json输入。比较好的做法是:在iPhone也定义一个User类,将json或者XML转换为User实体对象。

  1. - (IBAction)fetchXML:(id)sender  
  2. {  
  3.     NSURL *url = [NSURL URLWithString:@"http://10.5.23.117:21924/Service1.svc/UserXML/zhuqilin"];  
  4.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  5.     [request startSynchronous];  
  6.     NSError *error = [request error];  
  7.     if (!error) {  
  8.         NSString *response = [request responseString];  
  9.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"xml格式" 
  10.                                                             message:response  
  11.                                                            delegate:nil  
  12.                                                   cancelButtonTitle:@"OK" 
  13.                                                   otherButtonTitles:nil];  
  14.         [alertView show];  
  15.         [alertView release];  
  16.     }  
  17.     }  
  18. - (IBAction)fetchJson:(id)sender  
  19. {  
  20.     NSURL *url = [NSURL URLWithString:@"http://10.5.23.117:21924/Service1.svc/User/zhuqilin"];  
  21.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  22.     [request startSynchronous];  
  23.     NSError *error = [request error];  
  24.     if (!error) {  
  25.         NSString *response = [request responseString];  
  26.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"JSON格式" 
  27.                                                             message:response  
  28.                                                            delegate:nil  
  29.                                                   cancelButtonTitle:@"OK" 
  30.                                                   otherButtonTitles:nil];  
  31.         [alertView show];  
  32.         [alertView release];  
  33.     }  
  34. }  
  35. - (IBAction)createJson:(id)sender  
  36. {  
  37.     NSURL *url = [NSURL URLWithString:@"http://10.5.23.117:21924/Service1.svc/User/zhuqilin/1986-09-20"];  
  38.     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  39.     [request setRequestMethod:@"POST"];  
  40.     [request startSynchronous];  
  41.     NSError *error = [request error];  
  42.     if (!error) {  
  43.         NSString *response = [request responseString];  
  44.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建用户" 
  45.                                                             message:response  
  46.                                                            delegate:nil  
  47.                                                   cancelButtonTitle:@"OK" 
  48.                                                   otherButtonTitles:nil];   
  49.        [alertView show];  
  50.         [alertView release];  
  51.     }  

输出结果:

1、获取json格式的数据

2、获取xml格式的数据

3、创建一个用户实体:

总结:本文通过一个简单的例子说明了如何在iPhone中调用WCFRESTful服务。你会感觉到这个方式,比去定义soap去调用要好很多。

【编辑推荐】

  1. iPhone开发关于icon和Default及图片处理方法
  2. 官方文档 用MacRuby及Xcode 4开发独立iOS应用
  3. iOS设计指南:用户接口原则
  4. iOS双摇杆射击游戏的设计原理
  5. iPhone办公程序大百科 10大iOS效率应用

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...