ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的擴充功能,這個功能和概念 在以前的.NET 1.0-.NET3.5 技術中都沒有出現的新概念,它主要用途是可以很容易的將數據庫服務公開 在網絡上,然後透過URL網址就可以對數據庫進行CRUD的操作。ADO.NET Data Services能通過一個REST化 的方式將數據以Web上的數據服務展示。使得應用可以以數據服務的方式展現數據,然後被應用在企業網 絡和互聯網上的Web客戶端中。
本文演示如何創建ADO.NET Data Services,及如何創建客戶端並調用Data Services。
上一篇文章:
學習使用ADO.NET Data Services (ADO.NET 數據服務框架) - Part 1
創建一個簡單的客戶端程序
前面的操作幾乎都沒有寫任何代碼,可以理解的是,將IE 浏覽器作為客戶端來訪問service並不方便 。這裡,我們編寫一個簡單的客戶端程序來訪問subtext_content 博客隨筆表,並修改數據,然後提交給 service。
第一步是配置service,允許查詢並更新 subtext_content 數據表。
public static void InitializeService(IDataServiceConfiguration config) { // TODO: 設置規則以指明哪些實體集和服務操作是可見的、可更新的,等等。 // 示例: config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); config.SetEntitySetAccessRule("Subtext_Content", EntitySetRights.All); }
下面創建一個Windows Form – Client 端應用程序:
接下來為該client 端應用程序添加Service引用,在彈出的窗口中輸入:
http://localhost:31948/SubtextData.svc/
端口號為實際的Service端口號,可能和本實例不同。
一旦增加Service引用後,Client端應用程序將自動生成client-side的代理proxy繼承 DataServiceContext和必要的實體。同時,也添加了對System.Data.Services.Client 的引用,該命名空 間有DataServiceContext 對象需要的客戶端的框架。
另外,使用IQueryable 數據源暴露數據服務的優勢是你可以在客戶端使用LINQ to entities,框架負 責轉換為HTTP請求。例如,在IE 浏覽器中,如果你想僅僅返回2條評論信息,你可以在IE 浏覽器地址欄 輸入:
http://localhost:31948/SubtextData.svc/subtext_Content(10)/subtext_FeedBack?$top=2
在Client端應用程序中,我們可以寫LINQ查詢data service。下面,我們返回EntLib.com 作者寫的所 有博客隨筆:
private Uri serviceURI = new Uri("http://localhost:31948/SubtextData.svc/"); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { SubtextDataEntities ctx = new SubtextDataEntities(serviceURI); var contents = from c in ctx.subtext_Content where c.Author == "EntLib.com" select c; foreach (subtext_Content c in contents) { Console.WriteLine(c.EntryName); } grdSubtext.DataSource = contents.ToList(); }
通過ADO.NET Data Service 更新數據
為了更新數據庫,我們通知DataServiceContext 更新了對象,接著通過調用SaveChanges方法傳入更 新的數據到Server端。
private void btnUpdate_Click(object sender, EventArgs e) { SubtextDataEntities ctx = new SubtextDataEntities(serviceURI); var content = (from c in ctx.subtext_Content where c.Author == "EntLib.com" select c).FirstOrDefault(); if (content != null) { content.Title = "Welcome to http://forum.entlib.com"; ctx.UpdateObject(content); try { ctx.SaveChanges(); MessageBox.Show("Saved title"); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }
Client端程序運行界面如下:
本文配套源碼:http://www.bianceng.net/dotnet/201212/742.htm