2013-02-22 80 views
0

我想嘗試更改SOAP WCF以接受請求並以JSON格式返回結果以使數據流量更輕鬆。在Silverlight上使用JSON WCF

我看到JSON請求的功能如下:

wcfClient.OpenReadAsync(http://yourUrl.com/wcf/service1.svc/GetEmployees

,並做定期的SOAP請求函數來代替,看起來像:

wcfClient.GetEmployeesAsync();

1)對於JSON結果,你需要將它們解析成一個對象還是像SOAP一樣自動分析?

2)有沒有辦法做到這一點,而不需要做太多的工作,比如改變項目中的每一個WCF調用都看起來像「JSON-ish」?

回答

1

第一個想法是「使數據流量更小。」很好。

特別適用於移動設備。除此之外,不要認爲WCF xml會導致PC出現網絡問題。 XM是最可壓縮格式之一。通過WCF二進制文件壓縮。

對於「有沒有辦法做到這一點,而沒有做太多的工作?」

是的,有一個方法名稱RESTFul服務(不安分的服務)。現在微軟直接支持WEBApi。

您也可以使用ODATA進行篩選,排序操作

這裏有一些鏈接,

http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.aspx

http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx

ODATA http://www.odata.org/documentation/uri-conventions#FilterSystemQueryOption

一些做法說明,一些限制:

從具有IsReferenceType屬性的EntityObject派生的EntityFrameWork實體不允許您進行JSON序列化。 (我公司生產使用automapper POCO對象映射他們和序列化JSON)

的WebAPI支持你多想,如WebGet,WebInvoke的getXML給JSON,ODATA功能(只需選擇和格式不允許的。)

注意:你的web請求頭部你應該接受text/json來獲得真正的json。

「對於JSON的結果,你需要把它解析爲一個對象或...」

我可以說,你應該嘗試JSON.NET它移植庫作品無處不在。當您使用泛型函數反序列化時,它將返回您期望的集合。

希望它可以幫助別人。當發現這些stackoverflow幫助我像一個助理。

2

爲了補充Davut的答案 - WCF確實支持構建RESTful服務,儘管我同意ASP.NET Web API框架通常比WCF更易於使用。 JSON.NET是一個偉大的圖書館,它具有良好的反序列化功能(例如,它可以輕鬆地代表Employee對象列表的JSON,並將其轉化爲實際List<Employee>實例)

但爲了完整起見,如果你想要使用「正常」的WCF客戶端來訪問返回JSON的基於WCF的服務,你可以這樣做。這並不太直截了當,但你可以通過使用新的編碼器和轉換行爲來實現。 http://blogs.msdn.com/b/carlosfigueira/archive/2010/04/29/consuming-rest-json-services-in-silverlight-4.aspx的帖子更多地討論了它,並且有一個指向代碼示例的指針。

簡而言之,可以在Silverlight中使用WCF客戶端來使用JSON,但由於其複雜性通常沒有完成,並且Davut的選項(使用HTTP客戶端(如WebClient)下載JSON,然後使用JSON .NET將其解析爲對象)是首選。