WCF Data Services
![本页使用了标题或全文手工转换](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/69/ADO_NET_DSF.png/320px-ADO_NET_DSF.png)
WCF Data Services,舊稱ADO.NET Data Services Framework(代號Astoria,以下簡稱WCF DS)是基於 ADO.NET Entity Framework 上的一個簡單資料供應服務 (Data Provisioning Services),也是微軟的 REST (Representational state transfer) 的解決方案之一。特別為 AJAX,Silverlight以及Mashup應用程式提供資料服務所設計。
目前 ADO.NET DSF 已經內含於 .NET Framework 3.5 Service Pack 1 中。
發展背景
[编辑]以往在發展像是 AJAX 應用程式時,伺服端總是需要設計一個 HTTP 介面端口 (end point),通常都會使用 Web Service 來實作,但是隨著 Mashup 應用程式的成長,若每次都要為一份(或一組)資料撰寫 Web Service 或 HTTP end point 的話,對開發人員也是不小的負擔,而且 Web Service 只支援 XML/SOAP 的資料格式,無法相容於 Mashup 應用程式常用的 JSON 資料格式,微軟也發現未來的 Silverlight 應用程式也是會面臨到相同問題。
當時剛好微軟的 ADO.NET Entity Framework 也正在開發中,它的 EDM 能力剛好可以提供給 WCF 資料存取的能力,因此微軟特別以 ADO.NET Entity Framework 為基礎,開發一個專門提供 HTTP 端點資料服務的資料供應層,即為 WCF DS。
架構
[编辑]WCF DS 由 Entity Framework 中的 Entity Data Model (EDM) 為基底,Data Services Framework 的角色就是做為 EDM 的 HTTP 出入口,開發人員可以利用 HTTP 動詞來存取 Data Services Framework,某種程度來說,WCF DS 是由 EDM + WCF 而成的一種資料供應服務,它可以被放在 WCF HTTP 通道,ASP.NET 以及 IIS 中。
WCF DS 的資料來源,可以是 ADO.NET Entity Framework,但如果是來自於其他的資料來源,則可以利用為該資料來源所實作的 LINQ Provider(有實作 IQueryable<T> 介面的元件,若要支援更新則必須要再實作 IUpdatable 介面)來做為資料來源亦可。
WCF DS 除了可以將 Entity 公開到 HTTP 通道中,也可以由開發人員自行發展具商業邏輯的自訂函數來回傳資料,以及利用查詢的解譯器 (Query Interceptor) 來將查詢 Entity 的資料做過濾後再回傳。
存取方法
[编辑]WCF DS 開放 EDM 在 HTTP 通道中,因此存取方法都要使用 HTTP 方式,GET/POST/PUT/DELETE 都可以使用,而且每個動詞所代表的意義都不同。
- GET:查詢資料。
- PUT:更新資料,必須要和 GET 並用,由 GET 抓下資料修改後,用 PUT 更新。
- POST:新增資料。
- DELETE:刪除資料。
除了使用 HTTP 動詞以外,WCF DS 另提供了 .NET Client Library 讓 .NET Framework 應用程式可以存取,它也提供了讓 LINQ 可以存取到 WCF DS 的能力(即 LINQ to WCF DS)。
下列為使用 LINQ to WCF DS 的範例:
using System;
using System.Data.Services.Client;
using System.Linq;
using NorthwindModel;
namespace TestApplication
{
class Program
{
static void Main(string[] args)
{
NorthwindEntities ctx = new NorthwindEntities(new Uri("http://localhost:1365/Northwind.svc"));
var q = from c in ctx.Customers
where c.City == "London"
orderby c.CompanyName
select c;
foreach (var cust in q)
{
Console.WriteLine(cust.CompanyName);
}
}
}
}
若是使用Silverlight 2.0開發,則可以使用 .NET Client Library for Silverlight 2.0 來簡化設計,如下:
NorthwindEntities db = new NorthwindEntities(new Uri("http://localhost/NorthwindDataServices.svc/"));
var query = from c in db.Employees
select c;
AsyncCallback ac = asyncResult =>
{
var queryResult = (query as DataServiceQuery<NorthwindModel.Employees>).EndExecute(asyncResult);
foreach (var result in queryResult)
{
TextBlock item = new TextBlock();
item.Tag = result.EmployeeID;
item.Text = result.FirstName + " " + result.LastName;
this.lstEmployeeList.Items.Add(item);
}
};
(query as DataServiceQuery<NorthwindModel.Employees>).BeginExecute(ac, null);
資料格式
[编辑]在 WCF DS 中,可支援 JSON (JavaScript Object Notation) 以及 ATOM 兩種資料格式,因此可適用於多數的 Mashup 或 AJAX 應用程式。
參考資料
[编辑]
|
|
|