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。然後,按照實體數據模 型向導創建模型。這裡,我們選擇從數據庫創建,並選擇所有的數據表,完成向導操作。
上述過程創建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://localhost:31948/SubtextData.svc/
其中具體的端口號可能不同。
當我們想查詢數據時,可以通過HTTP GET 在浏覽器地址欄輸入:
http://localhost:31948/SubtextData.svc/subtext_Content
將返回SubtextData數據庫中所有博客帖子的種子(feed)。如果你使用 IE 或者Firefox浏覽器,浏 覽器將自動對種子應用樣式表CSS,不過你可以右鍵點擊,並查看源文件就可以看到實際返回的數據。下 面僅僅顯示部分返回的數據:
如果仔細一點,你會發現上述文件也返回subtext_content 到其他表之間的關聯關系。例如,你可以 返回subtext_content 中特定文章的評論信息:
http://localhost:31948/SubtextData.svc/subtext_Content(10)/subtext_FeedBack
上述鏈接返回subtext_content 文章(10)的所有評論列表信息。
如果你對開發RESTful Web services 感興趣,推薦你下載 Fiddler 工具,該工具允許你監視HTTP 數 據,使用Fiddler 比 IE 更方便查看數據。
歡迎繼續訪問 - 學習使用ADO.NET Data Services (ADO.NET 數據服務框架) - Part 2,及下載本文 范例程序。