gpt4 book ai didi

asp.net - 用于 WCF Rest 服务的 POST 数据的透明 GZIP 解压缩

转载 作者:行者123 更新时间:2023-12-04 16:12:30 26 4
gpt4 key购买 nike

这是我们的场景(不可协商):

  • 使用 IIS7 中托管的 WebHttpEndpoint 通过 HTTP 公开的 WCF REST 服务
  • 所有以 JSON 格式传输的响应和 POST 请求数据
  • 非 WCF Web 客户端
  • 我们已经在 IIS7 中为 JSON 响应激活了 gzip 压缩,效果很好。

  • 由于我们使用较大的 JSON 有效负载进行发布请求,因此我们为 JSON 发布数据实现了客户端 GZIP 压缩,并将“Content-Encoding” header 设置为“gzip”。不幸的是,IIS 不能开箱即用地处理这个问题。发布数据以压缩形式到达 WCF 反序列化器,这当然会导致异常。

    我尝试了各种扩展点来连接 WCF 管道,但唯一有希望的解决方案(操作行为)不起作用,因为在没有 WCF 客户端的情况下,永远不会调用 IOperationBehavior 接口(interface)的 ApplyClientBehavior 方法。

    最后,如果实现了一个 HttpModule 来完成工作,但由于以下警告,我对结果并不完全满意:
  • 尽管我可以通过将当前 HttpRequest 的 Filter 属性设置为 GZipInputStream 来透明地解压缩请求数据,但这只是解决方案的一半,因为 WCF 坚持从请求中准确读取 HttpRequest.ContentLength 字节,对于压缩请求而言,这显然要少得多比未压缩的负载
  • 由于一些超出我想象的奇怪原因,Microsoft 已经阻止了所有合法的方式来更改请求的 ContentLength。最后,我不得不修改请求的 ContentLength 属性的私有(private)支持字段。这不是您想在生产代码中做的事情。
  • Microsoft 还无法读取 HttpModule 中的请求 InputStream 来计算未压缩内容长度,这要求我们的 Web 客户端还传递包含未压缩内容长度的自定义 header

  • 总而言之,这感觉像是大量的工作,甚至无法干净地实现,所以我想知道是否有人可以指出在 IIS 中实现解压缩部分的替代方法。如果有商业产品,我完全可以推荐这样做的商业产品。

    最佳答案

    我认为您应该能够使用 service side Message inspector 来做到这一点

    在 AfterReceiveRequest 中解压

    关于asp.net - 用于 WCF Rest 服务的 POST 数据的透明 GZIP 解压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9108970/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com