2011年6月23日 星期四

WCF Data Service 的優缺點

最近一直與 WCF Data Service 打交道。也漸漸了解這個技術的優勢與缺點了。整理如下

優點1:RESTful

如果使用WCF來開發一個 CustomerService,就免不了如下的Method

AddCustomer(Customer customer);
DeleteCustomer(int id);
UpdateCustomer(Customer customer);
FindCustomers(string condition);

新刪修查,至少要發佈4個 Method。如果使用 WCF Data Service,只需要一個 Url 來定位即可。如果再使用 Entity Framework,更是方便。

優點2:WCF Data Service Client Library

使用 WCF Data Service Client Library 來查詢 OData的資料,可再進一步使用 LINQ 的語法來查詢資料。新增/刪除/修改資料時,更像是在操作 Entity Framework 一般的方便。見更新資料服務 (WCF Data Services)

優點3:跨平台

這個年代,服務不能跨平台,就沒有人要使用。因此,WCF Data Service 是非常簡單的 Url 定址,與 xml 純文字的回傳資料,再加上 HTTP 的 Verbs,即可完成簡單的操作。跨平台,是最大的賣點。看一下 oData SDK,各式各樣的平台與技術都被支援哦!

缺點1:查詢大都只能支援 HTTP Method = GET

WCF Data Service要查詢資料目前大都只支援 GET。當有大量資料要上傳到伺服器時,由於 HTTP GET 有 Url的長度限制(  通常為 8096 bytes),所以只好轉用 POST。但 WCF Data Service Client Library 支援 POST 的能力很差哦!連呼叫都必須使用 HttpWebRequestWebClient 來呼叫,相對來說實在很難用。

缺點2:支援LINQ 語法尚差

查詢資料服務 (WCF Data Services),初看之下看來很強悍,但 check LINQ 考量 (WCF Data Services) 中的「不支援的 LINQ 方法」一節,不支援的 LINQ 語法還真多。最常用的 JoinCount竟然也不支援,聲勢立即弱了下來。

缺點3:不適合大量資料上傳到伺服器

由於缺點1的關係,想要傳較多資料到伺服器時,就必須使用 WebInvoke 的 service operation。在Service Operation上,並不能使用類似 WCF Service 的 Stream 來讀取 POST 的資料。原因很簡單,因為 Stream 並無法自動發佈成 metadata。因此,如果要讀POST 的內容,必須使用 ASP.NET 的 HttpContext.Current.Request.Form 來讀取。因此程式碼就完全相依服 ASP.NET了。之後有空,就寫另一篇來介紹這個作法。

缺點4:只能跑 Http,不能跑 binary

RESTful 使用了 Url 來定址,新刪修查分別對應 POST, DELETE, PUT,GET等 HTTP Method(Verbs),所在只能跑 http 的 protocal,無法跑 binary 來傳資料。傳輸資料量變大後,效能就會比較差。幸好, IIS 有動態壓縮的功能,可以有效減少傳輸的資料量。

結論

看起來好像缺點比優點多一些,但是,跨平台卻是相當大的優勢。未來是 HTML5的世界,WCF Data Service 一定大有可為。

1 則留言:

videobooster 提到...

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info.

Share with Facebook