[WCF]建立一個wcf data service(支援OData)

  • 2835
  • 0
  • 2016-02-17

[WCF]建立一個wcf data service(支援OData)

電腦裡有安裝vs2012, vs2013,測試過的結果利用vs2013新增的的wcf data service 5.6不太可靠,明明只是簡單的新增一個wcf data service, 卻搞的要另外設定一些參數,因此還是改用比較穩定vs2012, 雖然導致odata的版本較舊,但是畢竟實際上也沒有用到odata最新版本那麼強大的功能。

首先打開vs2012, 新增一個wcf:

於專案新增項目Wcf data service:

然後可以發現剛剛才新增的.svc.cs竟然就有編譯的錯誤!其實這裡就是要你填入自己的EF名稱(一般是.edmx:ado.net entity model )來存取資料庫:

範例資料庫請參考[SQL]如何使用微軟的範例資料庫AdventureWorksDB, 很簡單,只要照著介紹做,不用一分鐘就完成。然後於專案中新增一個.edmx來存取資料庫,新增一個ado.net enity model:

然後回到剛剛有編譯錯誤的.svc.cs檔案裡面,把剛剛新增的.edmx名稱AdventureWorksEntities填入:
​public class WcfODataService : DataService< AdventureWorksEntities >

接著在config.SetEntitySetAccessRule設定想要查詢的資料表,在這邊是設定為全部資料表(*表示全部資料表)都可以查詢,如果想要查詢特定資料表就好的話,一個一個去指定即可:

// config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
//可讀取所有資料表
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
//可讀取特定資料表
//config.SetEntitySetAccessRule("Employee", EntitySetRights.AllRead);

wcf data service預設是只有回傳xml內容,然而json佔用的頻寬較小,因此再來更新nuget package來支援json格式,更新WCF Data Service Server那個套件即可(其他相關的會自動一併更新):

最後,因為還在debug階段,所以把web.config的下面這個屬性改成true,萬一有什麼錯誤訊息,畫面上才會想是詳細的錯誤訊息,而非簡易的!

接著按下F5執行此wcf data service,並於chrome或是chrome的套件postman(IE其實也可以測試,但。。。還要改一些設定,因此不考慮)(這邊採用chrome+postman兩個都有測)打入下列網址以測試是否能使用(localhost的port請自行修改):
http://localhost:53608/WcfODataService.svc/AddressType?$filter=AddressTypeID eq 1&$format=json

上面的json結果如果想改成xml格式的話,把網址的&$format=json拿掉就可以囉~

這篇大概是這樣。。。

參考文章:
讓wcf data service支援json:
http://charlesbc.blogspot.tw/2013/03/wcf-data-services-json.html
https://dotblogs.com.tw/jaigi/2013/07/30/112933
讓wcf data service可以查詢所有資料表:
http://www.codeproject.com/Articles/572417/AplusBeginner-splusTutorialplusforplusCreatingpl
建立一個基本的wcf data service以及讓wcf data service顯示明細的錯誤訊息:
https://dotblogs.com.tw/jaigi/archive/2013/05/07/103106.aspx
讓ie可以顯示wcf data service回傳的結果,而非只顯示摘要:
https://dotblogs.com.tw/jaigi/2013/07/07/107959