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配置。
<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 (增查改刪) .