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





本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2011/04/26/iphone-restful-wcf.html,如需转载请自行联系原作者


相关文章
phpstorm插件应用:Test RESTful WEB Service 控制台接口调试工具
phpstorm插件应用:Test RESTful WEB Service 控制台接口调试工具
200 0
|
API 对象存储 网络架构
OSS restful API 调用 put,上传文件,python发http request示例
发送put 请求,向bucket中写入文件,代码中*** 的部分改成实际内容。rest请求主要问题在拼header时authorization可能会有问题,注意生成signature时的入参。#tested env: python version v3.9.6 #author: Fred #2022-1-11 import hmac import hashlib import base64 im
1206 0
|
Oracle 关系型数据库 API
C# LIS检验系统源码,接口技术:RESTful API + Http+WCF
LIS检验系统一种专门用于医院化验室的计算机系统,它致力于提高医院化验室的工作效率和检测准确率。LIS系统由多个子系统组成,包括样本管理系统、质控系统、检验结果管理系统、报告管理系统等。体系结构:Client/Server架构 SaaS模式 客户端:WPF+Windows Forms 服务端:C# +.Net 数据库:Oracle 接口技术:RESTful API + Http+WCF
114 2
|
XML JSON 负载均衡
使用RestTemplate进行restful调用,你真的会了吗
使用RestTemplate进行restful调用,你真的会了吗
347 0
|
自然语言处理 人机交互 API
阿里云智能语音交互中长文本语音合成服务的restful api 中python3调用
智能语音交互产品基于语音识别、语音合成、自然语言理解等技术,实现“能听、会说、懂你”式的智能人机交互体验,适用于智能客服、质检、会议纪要、实时字幕等多个企业应用场景,长文本语音合成功能提供了将超长文本(如千字或者万字)合成为语音二进制数据的功能,此篇文章简单介绍基于python的简单调用
1079 0
阿里云智能语音交互中长文本语音合成服务的restful api 中python3调用
|
JSON 缓存 JavaScript
Restful Web Service设计规范
Restful Web Service设计规范
204 0
Restful Web Service设计规范
|
API 对象存储 网络架构
OSS restful API 调用 Delete,删除文件,python发http request示例
发送delete 请求删除bucket中的文件,代码中*** 的部分改成实际内容。rest请求主要问题在拼header时authorization可能会有问题。#tested env: python version v3.9.6 #author: Fred #2022-1-11 import hmac import hashlib import base64 import datetime im
449 0
|
API 对象存储 网络架构
OSS restful API 调用 get,遍历目录中的文件,python发http request示例
发送get 请求,遍历目录下的所有文件,代码中*** 的部分改成实际内容,这个API说明文档在bucket操作里面。rest请求主要问题在拼header时authorization可能会有问题,注意计算签名时的入参。#tested env: python version v3.9.6 #author: Fred #2022-1-11 import hmac import hashlib impo
648 0
|
Java Maven Android开发
《Java RESTful Web Service实战》第一章的实现补漏
韩陆,你好你的书,麻烦写的清楚一点,多写一些,也许还能多点稿费。小韩,写书认真一点。第13页上来就用maven命令行创建项目,这就有问题啊,没有pom.xml文件mvn这个命令怎么跑的起来呢?所以正确的过程是这样的:eclipse上创建项目创建的结果是这样的:
1414 0
|
JSON Java 数据格式
搭建一个RESTful Web Service
在搭建之前,首先了解一下什么是RESTful,RESTful(Representational state transfer),它并不是一项新技术,而是一种接口规范。
1699 0