iPhone中调用WCF RESTful Service

移动开发 iOS
REST(Representational State Transfer)是一种轻量级的Web Service架构风格,本文介绍了如何使用WCF创建restful分格的服务。通过这篇文章,作者将会通过一个demo来展示如何在iPhone中调用WCF restful service。

在前面我们介绍过跨平台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、创建一个数据交换实体类

/// <summary>  
/// User实体类  
/// </summary>  
[DataContract]  
public class User  
{  
    /// <summary>  
    /// 用户名  
    /// </summary>  
    [DataMember(Order = 0)]  
    public string Name { get; set; }  
    /// <summary>  
    /// 生日  
    /// </summary>  
    [DataMember(Order = 1)]  
    public string DayOfbirth { get; set; }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

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

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

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

public class Service1 : IService1  
{  
    public User GetUser(string name)  
    {  
        return new User { Name = name, DayOfbirth = new DateTime(1986, 10, 23).ToString() };  
    }  
    public User GetUserXML(string name)  
    {  
        return new User { Name = name, DayOfbirth = new DateTime(1986, 10, 23).ToString() };  
    }  
    public User CreateUser(string name, string dayOfbirth)  
    {  
        return new User { Name = name, DayOfbirth = dayOfbirth };  
    }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

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

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

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

6、在iis发布服务。

iPhone客户端调用:

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

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

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

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

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

- (IBAction)fetchXML:(id)sender  
{  
    NSURL *url = [NSURL URLWithString:@"http://10.5.23.117:21924/Service1.svc/UserXML/zhuqilin"];  
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
    [request startSynchronous];  
    NSError *error = [request error];  
    if (!error) {  
        NSString *response = [request responseString];  
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"xml格式" 
                                                            message:response  
                                                           delegate:nil  
                                                  cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];  
        [alertView show];  
        [alertView release];  
    }  
    }  
- (IBAction)fetchJson:(id)sender  
{  
    NSURL *url = [NSURL URLWithString:@"http://10.5.23.117:21924/Service1.svc/User/zhuqilin"];  
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
    [request startSynchronous];  
    NSError *error = [request error];  
    if (!error) {  
        NSString *response = [request responseString];  
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"JSON格式" 
                                                            message:response  
                                                           delegate:nil  
                                                  cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];  
        [alertView show];  
        [alertView release];  
    }  
}  
- (IBAction)createJson:(id)sender  
{  
    NSURL *url = [NSURL URLWithString:@"http://10.5.23.117:21924/Service1.svc/User/zhuqilin/1986-09-20"];  
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
    [request setRequestMethod:@"POST"];  
    [request startSynchronous];  
    NSError *error = [request error];  
    if (!error) {  
        NSString *response = [request responseString];  
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建用户" 
                                                            message:response  
                                                           delegate:nil  
                                                  cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];   
       [alertView show];  
        [alertView release];  
    }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.

输出结果:

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效率应用
责任编辑:佚名 来源: 博客园
相关推荐

2011-07-08 20:54:12

iPhone WCF

2011-04-01 10:40:53

WCFiPhone调用

2009-12-08 18:14:53

WCF Service

2009-12-08 16:42:48

WCF Service

2009-12-07 18:33:31

WCF Service

2009-12-08 16:01:50

WCF Service

2009-12-08 17:16:37

WCF Web Ser

2009-11-06 10:11:34

WCF和Web Ser

2009-12-22 15:14:33

WCF调用

2009-11-06 13:59:09

WCF Service

2010-02-25 10:35:17

WCF排队调用

2009-12-21 14:10:26

WCF异步调用

2010-02-24 13:42:55

WCF PreSess

2009-07-27 17:54:39

WCF服务ASP.NET

2009-11-09 10:50:30

WCF异步调用

2012-05-03 11:43:32

ApacheCXFRESTful

2009-06-12 14:32:53

WCFJSON对象jQuery

2009-11-06 15:54:15

WCF异步调用

2011-05-16 09:30:30

jQueryWCF

2009-12-22 18:43:00

WCF异步调用
点赞
收藏

51CTO技术栈公众号