WCF Data Service 程式設計相關技巧
我想許多人都知道.NET從3.5開始支援REST服務,且REST服務幾乎快紅遍半邊天了,當中WCF Data Services則是其中一種應用,WCF Data Services後端的實際存取資料庫的核心為Entity Framework,相信許多人都比我還熟Entity Framework,所以筆者就不多說了。筆者今天必須透過WCF Data Services來存取SQL Server 2008的Store Procedure,這個Store Procedure其實是個.NET Assembly,因此順道將處理的過程寫一個Sample檔並改以Northwind資料實做一遍記錄下來(已經熟悉的朋友就跳著讀吧^^)。
並加入一個ADO.NET 實體資料模型,並加入「HelloWorld」的預存程序,然後將命名空間設定為「NorthwindModel」:
此預存程序為一個.NET Assembly的應用程式,他會傳回一個字串型態的物件,不過這邊在使用Entity Framework呼叫Store Procedure時還須做一些處理,因為Entity Framework在更新資料庫模型時項目如果是Store Procedure或function時並不會自動產生程式碼,若開啟NorthwindModel.Designer.cs起來看,會發現只有「建構函式」與「部分方法」這兩個原先既有的區塊,如下:
這個時候需要到模型瀏覽器NorthwindModelEntityContainer. NorthwindEntities函式匯入 項目上面點選滑鼠右鍵,並選擇「加入函式匯入」,如下圖:
這時會出現「加入函式匯入」對話框,首先選擇預存程序名稱,並將函式名稱設為SP_HelloWorld,然後設定傳回值為純量的String型態,如下設定畫面:
完成後模型瀏覽器馬上會出現SP_HelloWorld這個函式的對應
並且會對 NorthwindModel.Designer.cs產生一段Function Import的程式碼,程式碼中看見我們剛剛設定的SP_HelloWorld方法,如下:
1: /// <summary>
2: ///沒有可用的中繼資料文件。
3: /// </summary>
4: /// <paramname="greeting">沒有可用的中繼資料文件。</param>
5: public ObjectResult<global::System.String> SP_HelloWorld(ObjectParameter greeting)
6: {
7: return base.ExecuteFunction<global::System.String>("SP_HelloWorld", greeting);
8: }
接著對專案加入一個WCF資料服務,引用NorthwindModel與System.Data.Objects,並指定這個資料服務的泛型常式為NorthwindEntities,並將初始化方法InitializeService中的config.SetServiceOperationAccessRule方法的服務使用權限設為”*”,接著就是撰寫程式碼了。筆者撰寫了一個GetHelloWorld()方法並貼上[WebGet()]屬性標籤,程式碼非常的簡單,如下:
1:
2: using System;
3: using System.Data.Services;
4: using System.Data.Services.Common;
5: using System.Collections.Generic;
6: using System.Linq;
7: using System.ServiceModel.Web;
8: using System.Data.Objects;
9: using NorthwindModel;
10: using System.ServiceModel;
11:
12: public class WcfSPDataService : DataService<NorthwindEntities>
13: {
14: //只呼叫一次方法初始化全服務原則。
15: public static void InitializeService(DataServiceConfiguration config)
16: {
17: // TODO: 設定規則,指出哪些實體集及服務作業可見、可更新等等。
18: // 範例:
19: // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
20: config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
21: config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
22: }
23:
24: [WebGet()]
25: public string GetHelloWorld()
26: {
27: NorthwindEntities entity = new NorthwindEntities();
28: ObjectResult<string> result = entity.SP_HelloWorld(new ObjectParameter("Greeting", "Gelis"));
29: return result.First();
30: }
31: }
程式寫完了,先來測試一下吧!如下圖,WcfSPDataService.svc的執行結果:
接著將URL修改一下,加上GetHelloWorld,也就是以REST方式呼叫
http://localhost:1092/WebNorthwindDataServices/WcfSPDataService.svc/GetHelloWorld
如下的執行結果:
簽名:
學習是一趟奇妙的旅程
這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。
軟體開發之路(FB 社團):https://www.facebook.com/groups/361804473860062/
Gelis 程式設計訓練營(粉絲團):https://www.facebook.com/gelis.dev.learning/
如果文章對您有用,幫我點一下讚,或是點一下『我要推薦』,這會讓我更有動力的為各位讀者撰寫下一篇文章。
非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^