在 WCF 中同时使用 JSON 和 gzip
Posted
技术标签:
【中文标题】在 WCF 中同时使用 JSON 和 gzip【英文标题】:Using JSON and gzip together in WCF 【发布时间】:2019-07-03 23:38:33 【问题描述】:我需要在服务器端 (WCF) 创建一个端点,它将接受来自客户端的包含标头的请求:
Content-Type : application/json
Content-Encoding : gzip
Accept-Encoding : gzip
如果不实现自定义 MessageEncodingBindingElement,这可能完成吗? 像这样的:
<customBinding>
<binding name="gzipbinding">
<binaryMessageEncoding compressionFormat="GZip"/>
<webMessageEncoding />
<httpTransport/>
</binding>
</customBinding>
但是它会抛出异常,因为绑定堆栈只能包含一个 encodingBindingElement。
【问题讨论】:
【参考方案1】:是的,自定义绑定中只允许一个编码绑定元素。在我看来,我们可以通过以下方法实现您想要的。 首先,定义包含 BinaryMessageEncoding 的自定义绑定,并将压缩格式设置为 Gzip。
<binaryMessageEncoding compressionFormat="GZip">
然后,使用JSON字符串作为要传递的参数。
JsonConvert.SerializeObject(person);
并且客户端通过反序列化参数来获取值。
Person person = JsonConvert.DeserializeObject<Person>(proxy.GetPersonDetailWithJson("123"));
必须注意的是,在某些特定情况下,我们应该避免 json 序列化,因为使用 json 对对象进行序列化和反序列化需要时间和资源(cpu、RAM)。
【讨论】:
以上是关于在 WCF 中同时使用 JSON 和 gzip的主要内容,如果未能解决你的问题,请参考以下文章
在 IIS8 中使用 Gzip 进行 Json HTTP 压缩
在同一 Service Fabric 可靠服务中同时使用 WCF 服务和 Web Api
使用springboot cache + redis缓存时使用gzip压缩以提升性能
在同一 WCF 绑定中同时使用 HTTP 和 HTTPS - 在代码中将 <security mode="Transport"> 更改为 <security mo