WCF Data Services

WCF Data Services 架構圖

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 應用程式。

參考資料

  • MSDN Library: ADO.NET Data Services Framework (页面存档备份,存于互联网档案馆
Azure服務平臺
WinFabric層
  • Microsoft Azure
AppFabric英语AppFabric
  • Caching Service英语AppFabric Caching Service
服務層
在線應用
圖形介面
音樂與音效
多媒體
Web
資料存取
網路
通訊
  • 訊息API英语Messaging Application Programming Interface
  • 電話API
  • WCF
管理
元件與模型
函式庫
驱动程序
安全性
.NET
软件工廠
  • EFx Factory英语EFx Factory
  • Enterprise Library英语Microsoft Enterprise Library
  • 複合使用者介面英语Composite UI Application Block
  • CCF英语Microsoft Customer Care Framework
  • CSF英语Microsoft Connected Services Framework
行程間通訊
可協助性
  • Active Accessibility英语Microsoft Active Accessibility
  • 使用者介面自動化英语Microsoft UI Automation
文字與多語系支援
  • DirectWrite
  • 文本服务框架英语Text Services Framework
  • 文本对象模型英语Text Object Model
  • 输入法编辑器
  • 語言介面套件英语Language Interface Pack
  • 多語系使用者介面英语Multilingual User Interface
  • Uniscribe
遊戲開發
实现
架構
共同語言基礎架構
CLI支持語言
共同語言1
其他語言2
Core家族3
元件
比較
即將推出
  • "Acropolis"
  • "Jasper"
1微软在Visual Studio.NET Framework中提供了或者将提供支持的语言
2被多數使用者使用,且非教學或研究型的語言。
3具有跨平台(Windows, Mac OSX, Linux)能力的開發框架。