这是我们的方案(不可协商):
- 使用IIS7中托管的WebHttpEndpoint通过HTTP公开的WCF REST服务
- 所有回复和POST请求数据均以JSON
传输
- 非WCF Web客户端
- 我们已经在IIS7中为JSON响应激活了gzip压缩,效果很好。
由于我们正在使用更大的JSON有效负载进行发布请求,因此我们为JSON发布数据实现了客户端GZIP压缩,并将“Content-Encoding”标头设置为“gzip”。不幸的是,IIS没有开箱即用。 post数据以压缩形式到达WCF反序列化器,这当然会导致异常。
我已经尝试了各种扩展点来挂钩到WCF管道但是唯一有希望的解决方案(Operation Behavior)不起作用,因为在没有WCF客户端的情况下,IOperationBehavior接口的ApplyClientBehavior方法永远不会被调用。 / p>
最后如果实现了HttpModule来完成工作,但由于以下警告我对结果并不满意:
- 虽然我能够通过将当前HttpRequest的Filter属性设置为只有解决方案一半的GZipInputStream来透明地解压缩请求数据,因为WCF坚持从请求中读取HttpRequest.ContentLength字节,压缩请求将是显然比未压缩的有效载荷小得多
- 出于某种奇怪的原因,微软已经阻止了改变请求的ContentLength的所有合法方式。最后,我必须修改请求的ContentLength属性的私有支持字段。这不是您想要在生产代码中做的事情。
- Microsoft还无法读取HttpModule中的请求InputStream来计算未压缩的内容长度,这需要我们的Web客户端也传递包含未压缩内容长度的自定义标头
总而言之,这感觉就像是一项甚至无法完全实现的大量工作,所以我想知道是否有人可以指出在IIS中实现解压缩部分的替代方案。如果有商业产品的建议,我绝对没问题。