0

我想尝试更改 SOAP WCF 以接受请求并以 JSON 格式返回结果,以减少数据流量的庞大。

我看到 JSON 请求函数如下所示:

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

并执行常规 SOAP 请求函数,而不是如下所示:

wcfClient.GetEmployeesAsync();

1)对于JSON结果,是需要解析成对象还是像SOAP一样自动解析?

2) 有没有办法做到这一点而无需做太多工作,比如将项目中的每个 WCF 调用更改为看起来“JSON-ish”?

4

2 回答 2

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/sumption-rest-json-services-in-silverlight-4.aspx上的帖子对此进行了更多讨论,并提供了指向代码示例。

简而言之,可以在 Silverlight 中使用 WCF 客户端使用 JSON,但由于其复杂性,通常不会这样做,并且 Davut 的选项(使用 WebClient 等 HTTP 客户端下载 JSON,然后使用 JSON.NET 等库进行解析它变成对象)是首选。

于 2013-02-24T15:54:23.527 回答
1

首先是“减少数据流量”的想法。很好。

特别是对于移动设备。除此之外,不要认为 WCF xml 会导致 PC 出现网络问题。XM 是最可压缩的格式之一。通过 WCF 二进制文件,它会被压缩。

对于“有没有办法在不做太多工作的情况下做到这一点?”

是的,上面有一个方式名称 RESTFul Services(Restless Services)。现在微软通过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 序列化。(我使用自动映射器生成 POCO 对象并将它们映射并序列化 json)

WEBAPI 支持你想的很多如 WebGet,WebInvoke GetXML 提供 JSON ,ODATA 特性(只允许选择和格式化。)

注意:在您的 Web 请求的标头中,您应该接受 text/json 以获得真正的 json。

“对于JSON结果,你需要将它们解析成一个对象还是......”

我可以说你应该试试JSON.NET,它的可移植库无处不在。当您使用泛型函数反序列化时,它会返回您期望的集合。

希望它可以帮助某人。在发现这些 stackoverflow 时,我就像一个助手一样帮助了我。

于 2013-02-23T13:39:04.417 回答