首頁 »
2009/12/29

Web Application Toolkit for REST Services 程式開發與資料存取

Web Application Toolkit for REST Services 程式開發與資料存取
本篇為祭司的微軟教學及錄影文章
【邊做邊學 Web Application Toolkit 系列 2 - Web Application Toolkit for REST Services 程式開發與資料存取】。接續上一篇操作性的 REST 服務介紹,本篇要講解的是如何建立 REST 服務專案及程式開發,並說明如何在另一個專案中對 REST 服務進行遠端存取,然後將回傳的資料加以顯示。

【邊做邊學 Web Application Toolkit 系列 2 - Web Application Toolkit for REST Services 程式開發與資料存取】教學錄影請看微軟官方網站之網址:
http://msdn.microsoft.com/zh-tw/ee804743.aspx

一.安裝 WCF REST Starter Kit

雖然 Web Application Toolkit for REST Services 套件所附的 Microsoft.Http.dll、Microsoft.Http.Extensions.dll 與 Microsoft.ServiceModel.Web.dll 三個組件是源自於「WCF REST Starter Kit」,但仍缺乏其中一個「Paste XML as Types」功能,故請先安裝完整的 WCF REST Starter Kit。

WCF REST Starter Kit下載網址:
http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24644

WCF REST Starter Kit 環境需求如下:

  • .NET Framework 3.5 SP1
  • Visual Web Developer 2008 (Express Edition) 或 Visual Studio 2008 Professional 專業版以上

二.安裝 REST Services Web Application 樣板

接 著請安裝 C:RESTServicesVisualStudioTemplates VisualStudioTemplates的REST Services 樣板,安裝完成後,請建立一個「Rest Service Web Application」專案,使用預設命名「RESTServiceWebApplication1」。


圖1 建立 REST Service 網頁專案

1. 建立自訂的 REST Services 公開服務

當 REST Service 專案建立完成後,裡面會有一個「Service1.svc」服務,請將其改名為「RESTService1.svc」,裡面有幾個預先建立的 Operation 作業(Operation 是指網路公開的方法),以下是「GetResources()」的 Operation 程式,WebGet 表示其存取是「/」根路徑。

[OperationContract]
[WebGet(UriTemplate = "/")]
public RESTService1ResourceList GetResources()
{
return resources;
}

在此將修改此 Operation,透過它來回傳 Northwind 北風資料庫的 Employees 資料表查詢,以下是步驟說明:

Step 1:建立 EDM
建立一個 NorthwindModel.edmx,並加入 Employees 資料表定義。

Step 2:建立查詢回傳型別
在專案中新增 Entities 資料夾,在此加入 Employee.cs,它是 LINQ 查詢回傳的型別,裡面之所以宣告五個 Properties 屬性,是配合下一步驟中,LINQ 只查詢這五個欄位資料:

namespace RESTServiceWebApplication1.Entities
{
public class Employee
{
public int EmployeeID { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
}

Step 3:以 LINQ to Entities 查詢並回傳員工基本資料
接著修改 GetResources() 程式,加入 LINQ to Entity 查詢員工基本資料程式,在 LINQ to Entity 查詢 EmployeeID、LastName、Title、City、Country 五個欄位後,最終會轉換成 LIST 集合,然後回傳。

[OperationContract]
[WebGet(UriTemplate = "/")]
public List GetResources()
{
//以 LINQ to Entities 查詢員工基本資料
NorthwindEntities context = new NorthwindEntities();

var emps = (from p in context.Employees
select new Employee
{
EmployeeID = p.EmployeeID,
LastName = p.LastName,
Title = p.Title,
City = p.City,
Country = p.Country
}).ToList();

return emps;
}

2. Operation 作業之 WebGet Attribute 與 WebInvoke Attributes 解釋

RESTService1.svc 程式中,在 Operation 前有 [OperationContract]、[WebGet(…)] 與 UriTemplate 宣告,以下是功能解釋:

  • [OperationContract] 是 Attribute 屬性,所有 WCF 服務中公開的方法規定必須加註 [OperationContract]。
  • [WebGet(…)] 也是 Attribute 屬性,它的作用是讓程式可以透過 HTTP GET 來呼叫,通常是用於資料的讀取。
  • UriTemplate 則是指定 URI,例如 [WebGet(UriTemplate = "/")] 可以指定 URI 為/根路徑。
  • 但如果 Operation 作業想要建立的方法是 Insert、Update 與 Delete 的話,則不能用 [WebGet(…)] 宣告,而必須改用 [WebInvoke(…)] 宣告。

三.ASP.NET WebForm 如何消費取存 REST Services 服務

其 實 REST 在 URI 查詢語法上並不是特別困難,只要了解其基本規則,在瀏覽器URI網址列中輸入查詢 REST 服務語法,瀏覽器就會顯示回傳的 XML 資料。但要如何讓 C# 或 VB 程式中呼叫存取 REST Services,以及回傳的 XML 資料要如何有效處理,交給 WebForm 控制項來顯示,這才是較為困難的重要關鍵,以下是步驟說明:

Step 1:加入另一個 WebApplication1 專案
在 Solution 方案中,加入新的 WebApplication1 專案,它是用來消費 REST 服務的 Client 端應用程式。

Step 2:複製 XML 回傳資料
請執行 RESTService1.svc 程式,它會回傳 XML 格式的員工基本資料,接著在瀏覽器畫面中按滑鼠右鍵,選擇【檢視原始檔】,然後記事本會開啓原始 XML 資料,最後全選並複製到剪貼簿中。


圖2 複製 XML 回傳資料

Step 3:建立 DataType.cs 型別
請在專案中加入 DataType.cs 類別,修改 DataType.cs 中的 namespace 命名空間為「RESTServiceWebApplication1」,並刪除原本的預設建構式:

namespace RESTServiceWebApplication1
{

}

接著將游標移至 namespace 中任一處空白,點選【編輯】的【Paste XML as Types】,如此系統會將剪貼簿中的 XML 資料產生相對應的類別型別,其中有 ArrayOfEmployee 與 ArrayOfEmployeeEmployee 兩個類別,它們代表 LINQ to Entity 語法中的回傳型別。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace RESTServiceWebApplication1
{
///
[System.CodeDom.Compiler.GeneratedCodeAttribute(…)]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(…)]
[System.Xml.Serialization.XmlRootAttribute(…)]
public partial class ArrayOfEmployee
{
private ArrayOfEmployeeEmployee[] employeeField;

///
[System.Xml.Serialization.XmlElementAttribute("Employee")]
public ArrayOfEmployeeEmployee[] Employee
{
get
{
return this.employeeField;
}
set
{
this.employeeField = value;
}
}
}
///
[System.CodeDom.Compiler.GeneratedCodeAttribute(…)]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(…)]
public partial class ArrayOfEmployeeEmployee
{
private string cityField;
private string countryField;
private ushort employeeIDField;
private string lastNameField;
private string titleField;

///
public string City
{
get
{
return this.cityField;
}
set
{
this.cityField = value;
}
}
…略
}
}

Step 4:加入 ReadEmployees.aspx 頁面
在 WebApplication1 專案中加入 ReadEmployees.aspx 頁面,並在頁面中加入一個 GridView 控制項,用來顯示 Employees 員工基本資料查詢結果。

Step 5:存取 REST 服務與資料處理
在 ReadEmployees.aspx.cs 加入存取 REST 服務程式:

public partial class ReadEmployees : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var client = new HttpClient();
var serviceCallUri = new Uri(string.Format(CultureInfo.InvariantCulture,
"http://Localhost:7200/RESTService1.svc/"));

using (HttpResponseMessage response = client.Get(serviceCallUri))
{
//如果不 OK,則擲出例外
response.EnsureStatusIs(HttpStatusCode.OK);

//反序列化
RESTServiceWebApplication1.ArrayOfEmployee list =
response.Content.ReadAsXmlSerializable
();

//以foreach 讀取資料
foreach (RESTServiceWebApplication1.ArrayOfEmployeeEmployee p
in list.Emp
{
Response.Write(p.EmployeeID + " , " + p.LastName + " , "
+ p.Title + " , " + p.City + " , " + p.Country + "
");
}

//以LINQ 讀取資料
var emps = from p in list.Employee
select new
{
EmployeeID = p.EmployeeID,
LastName = p.LastName,
Title = p.Title,
City = p.City,
Country = p.Country
};

//顯示資料
GridView1.DataSource = emps;
GridView1.DataBind();
}
}
}

若本篇所有步驟都做對的話,執行 ReadEmployees.aspx 網頁後,可以看到下圖從 REST 服務傳回的資料,而這就是一個 REST Services 服務程式的建立與 Client 端消費的過程,REST 對於資料的公開與存取,是不是變得十分簡單呢!


圖3 WebForm 存取 REST 服務資料



Web Application Toolkit for REST Services 簡介與操作示範←上一篇 │首頁
本文引用網址: