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、创建一个数据交换实体类
/// User实体类
///</summary>
[DataContract]
publicclass User
{
///<summary>
/// 用户名
///</summary>
[DataMember(Order =0)]
publicstring Name { get; set; }
///<summary>
/// 生日
///</summary>
[DataMember(Order =1)]
publicstring DayOfbirth { get; set; }
}
2、服务契约:定义了三个方法,分别用来获取用户的XML格式、json格式以及创建用户。
publicinterface 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 User GetUser(string name)
{
returnnew User { Name = name, DayOfbirth =new DateTime(1986, 10, 23).ToString() };
}
public User GetUserXML(string name)
{
returnnew User { Name = name, DayOfbirth =new DateTime(1986, 10, 23).ToString() };
}
public User CreateUser(string name, string dayOfbirth)
{
returnnew User { Name = name, DayOfbirth = dayOfbirth };
}
}
4、对于vs2008创建的wcf服务,需要在.svc文件中加入下面代码:
5、在web.config中将绑定方式改成webHttpBinding
6、在iis发布服务。
iPhone客户端调用:
这里使用ASIHTTPRequest,它是一个直接在CFNetwork上做的开源项目,提供了一个比官方更方便更强大的HTTP网络传输的封装,非常的好用。
在xcode中拖一个简单的界面,如下图,分别调用服务端的三个方法:
定义下面三个方法与三个button的点击事件对应:
- (IBAction)fetchJson:(id)sender;
- (IBAction)createJson:(id)sender;
三个点击事件的具体实现:下面的代码为了简单起见,直接将xml和json输入。比较好的做法是:在iPhone也定义一个User类,将json或者XML转换为User实体对象。
{
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
(全文完)
以下为广告部分
您部署的HTTPS网站安全吗?
如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!
快速了解HTTPS网站安全情况。
安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。
安装部署SSL证书变得更方便。
SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。
让服务器远离SSL证书漏洞侵扰
TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2010-04-26 回家的路走了24年,何时才是个头