我想尝试更改SOAP WCF以接受请求并以JSON格式返回结果,以使数据流量不那么笨重。
我看到JSON请求函数如下所示:
wcfClient.OpenReadAsync(http://yourUrl.com/wcf/service1.svc/GetEmployees)
并执行常规SOAP请求函数,如下所示:
wcfClient.GetEmployeesAsync();
1)对于JSON结果,您是否需要将它们解析为对象,还是自动解析为SOAP?
2)有没有办法在不做太多工作的情况下做到这一点,例如将项目中的每个WCF调用更改为“JSON-ish”?
答案 0 :(得分: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的选项(使用WebClient等HTTP客户端下载JSON,然后使用JSON等库)。 NET将其解析为对象)是首选。
答案 1 :(得分:1)
首先,这个想法“使数据流量不那么笨重”。很好。
特别是对于移动设备。除此之外,不要认为WCF xml会导致PC出现网络问题。 XM是最可压缩的格式之一。通过WCF二进制文件,它将被压缩。
对于“如果没有做太多工作,有没有办法做到这一点?”
是的,RESTFul服务(Restless Services)上有一个名称。现在,微软直接通过WEBApi支持它。
您也可以使用ODATA进行过滤,订购操作
以下是一些链接,
http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.aspx
ODATA http://www.odata.org/documentation/uri-conventions#FilterSystemQueryOption
一些练习笔记,一些限制:
从EntityObject派生的EntityFrameWork实体具有IsReferenceType属性,不允许您进行JSON序列化。 (我使用自动映射器生成POCO对象并映射它们并序列化json)
WEBAPI支持你很多想法,比如WebGet,WebInvoke GetXML Give JSON,ODATA功能(只选择和格式不允许。)
注意:在您的Web请求标题中,您应该接受text / json来获取真正的json。
“对于JSON结果,您是否需要将它们解析为对象或......”
我可以说你应该尝试JSON.NET它的便携式图书馆无处不在。使用泛型函数反序列化时,它会返回您期望的集合。
希望它有所帮助。虽然发现这些stackoverflow帮助我成为一名助手。