學習使用ADO.NET Data Services (ADO.NET 資料服務框架)
ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的擴充功能,這個功能和概念在以前的.NET 1.0-.NET3.5 技術中都沒有出現的新概念,它主要用途是可以很容易的將資料庫服務公開在網路上,然後透過URL網址就可以對資料庫進行CRUD的操作。ADO.NET Data Services能通過一個REST化的方式將資料以Web上的資料服務展示。使得應用可以以資料服務的方式展現資料,然後被應用在企業網路和網際網路上的 Web客戶端中。
REST (Representational State Transfer) 用最單純的 URL 網址,就讓一般客戶、應用程式能直接訪問、寫入遠端主機上的資料庫。此外,微軟實現 REST 的 ADO.NET Data Services,亦有一套安全控管、存取許可權控管的機制,不必擔心安全性的問題。
在 .NET 平臺方面,未來的 .NET Framework 4.0 及 Visual Studio 2010,仍有 ADO.NET Data Services Framework 2.0 的版本,也有新的 4.0 版的 System.Data.Services 類庫。
在我的部落格網站 (http://blog.entlib.com/entlibforum ) 將演示如何在n-tier 應用程式中使用ADO.NET Data Servers,不過本文將重點介紹ADO.NET Data Services 的入門部分。按照如下具體操作來完成整個練習。
File > New Project > ASP.NET Web Application....
通過VS 2008 SP1 建立一個ADO.NET Data Service 是很容易的,第一步建立一個ASP.NET Web Application 專案:
上述將建立一個帶有default.aspx 頁面的ASP.NET 專案。如果你僅僅需要建立service,你可以刪除default.aspx 檔案。接著增加一個新的item到專案中,選擇ADO.NET Data Service。
在本例項中我們採用了SubtextData 資料庫(http://blog.entlib.com/ 開源部落格平臺的後臺資料庫),因此這裡對ADO.NET Data Service 命名為 SubtextData.svc。上述步驟將自動新增System.Data.Services 和System.Data.Services.Client 到專案中。右鍵點選SubtextData.svc 檔案,選擇”設定為起始頁”選項。
上述步驟自動建立的SubtextData.svc.cs 檔案如下,SubtextData 類繼承DataService類:
namespace MyDataService
{
public class SubtextData : DataService< /* TODO: 在此放置資料來源類名*/ >
{
// 僅呼叫此方法一次以初始化涉及服務範圍的策略。
public static void InitializeService(IDataServiceConfiguration config)
{
// TODO: 設定規則以指明哪些實體集和服務操作是可見的、可更新的,等等。
// 示例:
// config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
// config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
}
}
}
增加Entity Data Model
增加ADO.NET Entity Data Model 到專案中,檔案命名為 SubtextDataModel。然後,按照實體資料模型嚮導建立模型。這裡,我們選擇從資料庫建立,並選擇所有的資料表,完成嚮導操作。
關於ADO.NET Entity Data Model 的具體介紹,請參考如下文章:
上述過程建立IQueryable 資料來源SubtextDataEntities。現在,我們返回Data Service類,並填充Class name,如下所示:
public class SubtextData : DataService< SubtextDataEntities >
設定資料模型中表的訪問控制
下一步,我們需要控制資料模型中表的訪問控制。允許對資料庫中所有表進行讀、寫操作是一個糟糕的設計,因此我們需要在 DataServiceConfigration 中配置 EntitySetAccessRule,並傳入給 InitializeService 方法。這是一個共享的方法,因此不管建立多少個SubtextData DataService,該方法僅執行一次。在通過Visual Studio 除錯時,如果你修改了該方法的程式碼,你需要記得強制重新編譯。
public static void InitializeService(IDataServiceConfiguration config)
{
// TODO: 設定規則以指明哪些實體集和服務操作是可見的、可更新的,等等。
// 示例:
config.SetEntitySetAccessRule("*", EntitySetRights.All);
}
上述設定允許所有人更新、插入、刪除和查詢模型中的所有表,可能是一個不好的設計,因此你可以調整為只讀Read-only:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
你也可以寫一些額外的方法用來查詢和更新資料,我們在隨後的文章會進行描述,或者你也可以直接訪問MSDN - http://msdn.microsoft.com/en-us/library/cc907912.aspx。
下面我們開始在 IE 瀏覽器通過HTTP GET 查詢資料。
通過HTTP GET 查詢資料
編譯執行本專案,將自動開啟瀏覽器,並列出所有在資料模型中執行方法的實體。
其中具體的埠號可能不同。
當我們想查詢資料時,可以通過HTTP GET 在瀏覽器位址列輸入:
將返回SubtextData資料庫中所有部落格帖子的種子(feed)。如果你使用 IE 或者Firefox瀏覽器,瀏覽器將自動對種子應用樣式表CSS,不過你可以右鍵點選,並檢視原始檔就可以看到實際返回的資料。下面僅僅顯示部分返回的資料:
如果仔細一點,你會發現上述檔案也返回subtext_content 到其他表之間的關聯關係。例如,你可以返回subtext_content 中特定文章的評論資訊:
上述連結返回subtext_content 文章(10)的所有評論列表資訊。
如果你對開發RESTful Web services 感興趣,推薦你下載 Fiddler 工具,該工具允許你監視HTTP 資料,使用Fiddler 比 IE 更方便檢視資料。
歡迎繼續訪問 - 學習使用ADO.NET Data Services (ADO.NET 資料服務框架) - Part 2,及下載本文範例程式。