如何为WCF服务启用IIS压缩?

Syl*_*ain 9 compression wcf

我目前使用自定义gzip编码器为我的WCF服务.如果可能的话,我想用内置的IIS 7压缩替换它.我无法在线查找有关如何操作的信息.

有没有办法为WCF服务启用IIS 7压缩?你知道这是否会与.Net 4一起开箱即用?

编辑6月15日:我仍在寻找一种用主流方法替换我们的自定义gzip编码器的方法,所以如果您知道如何使用.Net 4和IIS 7,请回答这个问题.

谢谢


补充工具栏:我尝试手动执行此操作

由于我无法通过简单地旋转几个旋钮找到如何做到这一点,我决定尝试手动启用它.

到目前为止,我有:

  • 安装并启用了IIS 7动态压缩模块
  • 更改了applicationHost.config文件的部分以启用mimeType="application/soap+xml"和的压缩mimeType="application/xop+xml".

我使用HTTP嗅探器来嗅探从我的应用程序发送的流量(Windows窗体).我看到请求没有Accept-Encoding:gzip,deflatehttp标头.

所以我

  • 使用OperationContextScope类及其手动将其添加到所有传出呼叫OutgoingMessageProperties.(如果我找到解决方案,我会在稍后发布详细信息).

使用http嗅探器,我可以看到客户端标头现在具有正确的标头:

POST /### path to my service ####/MyService.svc HTTP/1.1
MIME-Version: 1.0
Content-Type: multipart/related; type="application/xop+xml";
    start="<http://tempuri.org/0>";
    boundary="uuid:####### some uuid #############";
    start-info="application/soap+xml"
Accept-Encoding: gzip,deflate
Host: ####### my server name #############
Content-Length: 1753
Expect: 100-continue
Run Code Online (Sandbox Code Playgroud)

但服务器响应仍未压缩.

为什么服务器响应未压缩?我使用过正确的mime类型吗?一旦我让服务器返回压缩答案,客户端会自动解压缩它还是必须在客户端编写代码进行解压缩?


谢谢你的帮助

小智 9

我有同样的问题; .aspx页面已被压缩但WCF内容未被压缩.它与WCF服务返回的内容类型有关,后者附加到mime类型.

我让它使用ApplicationHost.config中的以下部分:

<dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/*" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</dynamicTypes>
Run Code Online (Sandbox Code Playgroud)

这就是我所做的(大多数已经提到的相同步骤):

  • 为IIS角色安装动态压缩角色服务
  • 为您用于托管WCF服务的网站启用动态内容压缩
  • 打开%SystemRoot%\ system32\inetsrv\config\applicationhost.config并将相关内容类型添加到
  • 在此之后它仍然无法正常工作.
  • 我用Firefox的Tamper Data检查数据,发现返回的内容类型实际上是"application/xml; charset = utf-8".
  • 添加完整的内容类型,包括"; charset = utf-8"到该部分后,它工作:
<add mimeType="application/xml; charset=utf-8" enabled="true" />
Run Code Online (Sandbox Code Playgroud)

由于我觉得字符集编码不应该确定压缩是否有效,我最终让IIS压缩所有application/*内容类型.


Dav*_*Hay 1

也许这取决于您正在使用的特定 WCF 服务设置,但对于我使用它的应用程序(所有都是 .NET 应用程序和 Silverlight 页面的混合访问),生成的 WCF 客户端类包含一个可以设置的 EnableDecompression 属性为真。之后,我的 Winforms 应用程序发送正确的标头,并且 Web 服务通信被正确压缩。