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 ; }
}

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去调用要好很多,如果你有更方便的方式,请一定要告诉我哈。

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



(全文完)


以下为广告部分

您部署的HTTPS网站安全吗?

如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!

SSL检测评估

快速了解HTTPS网站安全情况。

安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。

SSL证书工具

安装部署SSL证书变得更方便。

SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。

SSL漏洞检测

让服务器远离SSL证书漏洞侵扰

TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值