RESTful 服务遵循REST(Representational State
Transfer)的架构风格。
在实现你第一个Restful 服务之前,让我们先理解它的概念。就像我们知道的那样,WCF(Windows通讯接口)让我们能够使用基于一系列协议的SOAP来打电话和交换信息,这些协议包含HTTP,TCP,Named
Pipes 和MSMQ等等。在一个脚本中,如果我们使用基于HTTP的SOAP,我们只是把HTTP作为一个运输工具。但是,HTTP并不仅仅是个传输的工具。所以,当我们将RESY架构形式的时候,那就决定了“我们知识简单的使用HTTP来进行通讯,而不是使用一些复杂的机制,像CORBA,RPC或者SOPA,来通讯”。
对于所有的CRUD(Read/Create/Update/Delete),RESTFul架构基于HTTP的简单动作(GET,POST,PUT,And
DELETE)来实现。它简单而且轻巧。为了简单一些,我将通过Get请求来实现一个服务,这个服务返回有限的几个类型的XML格式的数据。
跟随下面5个步骤,创建你的第一个返回数据类型XML的RESTful服务。
创建一个WCF工程.
组织要返回的数据(e.g. Prodcut).
创建服务协议
实现服务.
配置服务和行为。
1.创建一个WCF服务功能
打开 Visual Studio.
在File -> New Project 里. 在左侧选择WCF创建一个新的
WCF Service Application.
2. 组织要返回的数据
为新建的工程添加一个类. 命名为 Products.cs.
现在这个类 Products.cs file 包含两个部分. 第一个是数据的定义.
[DataContract] public class Product { [DataMember] public int ProductId { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string CategoryName { get; set; } [DataMember] public int Price { get; set; } } |
第二部分是这个类的单例实现,它从数据库中获取产品信息让后返回产品列表。为了简单一些,我们在类中组织数据而不是从数据库取得。如下:
public partial class Products { private static readonly Products _instance = new Products(); private Products() { } public static Products Instance { get { return products; } } private List<Product> products = new List<Product>() { new Product() { ProductId = 1, Name = "Product 1", CategoryName = "Category 1", Price=10}, new Product() { ProductId = 1, Name = "Product 2", CategoryName = "Category 2", Price=5}, new Product() { ProductId = 1, Name = "Product 3", CategoryName = "Category 3", Price=15}, new Product() { ProductId = 1, Name = "Product 4", CategoryName = "Category 1", Price=9} }; } } |
3.创建服务协议
按照下面的内容创建 WCF Service :
项目将增加一个协议以及服务文件下面的代码就是服务协议 i.e. IProductRESTService.cs.
public interface IProductRESTService { [OperationContract] [WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetProductList/")] List<Product> GetProductList(); } |
IProductRESTServicecontains 只包含一个方法即GetProductList.需要重点了解的是
WebInvoke的属性和参数
Method = "GET", 代表HTTP GET
请求.
ResponseFormat = WebMessageFormat.Xml,
代表接收下面两个是的内容。但我们可以将值修改为WebMessageFormat.json。来接收就送格式的内容
BodyStyle = WebMessageBodyStyle.Wrapped,表明
request和 response 请求将被包装.
UriTemplate = "GetProductList/",由两部分。URL路径和查询路径
不要忘记在顶部添加 System.ServiceModel.Webat
.
4. 实现 RESTful
在这个步棸里面我们将实现服务.只有一个方法GetProductListis
在协议的定义中,因此服务类实现如下:
public class ProductRESTService : IProductRESTService { public List<Product> GetProductList() { return Products.Instance.ProductList; } } |
5. 配置服务与特性
最后一步是用配置文件配置服务和他的操作以及它的特性. 以下是完整的ServiceModel配置。
<system.ServiceModel> <services> <service name="MyRESTService.ProductRESTService" behaviorConfiguration = "serviceBehavior"> <endpoint address="" binding="webHttpBinding" contract="MyRESTService.IProductRESTService" behaviorConfiguration="web"> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="serviceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="web"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> |
网站的http协议在 RESTful 服务上绑定
现在创建 RESTful 服务已经完成。你可以简单的运行或者测试一下。
右击ProductRESTService.svc 文件选择 "View
in Browser(在浏览器中查看)". 你将看到如下图像。这证明服务已启动。
只需修改浏览器的URl增加上 "GetProductList/".
因此,这是一个 定义 UriTemplete 服务协议的方法.
希望,这个简单的 WCF教程对读者有所帮助.保持做事的简单性。我仅在获得HTTP
get请求的时候获得记录信息。在以后,我将提供使用RESTful 服务所有的 CRUD (增查改删) .
|