zoukankan      html  css  js  c++  java
  • iPhone中调用WCF RESTFUL Service

    转:http://www.cnblogs.com/zhuqil/archive/2011/04/26/iphone-restful-wcf.html

    在前面的一篇文章:跨平台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; } }
    复制代码

    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); }
    复制代码

    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 }; } }
    复制代码

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

    Factory="System.ServiceModel.Activation.WebServiceHostFactory"

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

    6、在iis发布服务。

    iPhone客户端调用:

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

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

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

    - (IBAction)fetchXML:(id)sender; - (IBAction)fetchJson:(id)sender; - (IBAction)createJson:(id)sender;

    三个点击事件的具体实现:下面的代码为了简单起见,直接将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、获取json格式的数据

    2、获取xml格式的数据

    3、创建一个用户实体:

    总结:本文通过一个简单的例子说明了如何在iPhone中调用wcf restful服务。你会感觉到这个方式,比去定义soap去调用要好很多,如果你有更方便的方式,请一定要告诉我哈。

    本文代码:https://files.cnblogs.com/zhuqil/sourcecode.rar

  • 相关阅读:
    有理想的程序员必须知道的15件事
    C#是唯一能挑战Java的编程语言?
    ADO.NET Entity Framework 如何:定义具有修改存储过程的模型(实体框架)
    Android sqlite3工具的使用
    SQLite管理工具
    在 Android 应用程序中使用 Internet 数据 解析 XML、JSON 和 protocol buffers 数据
    2011年1月编程排行榜:PHP表现不佳,Python夺冠
    NoSQL开篇——为什么要使用NoSQL
    Windows 7任务栏与站点的集成
    Apache中 RewriteCond 规则参数介绍
  • 原文地址:https://www.cnblogs.com/jackljf/p/3588934.html
Copyright © 2011-2022 走看看