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

如何为WCF服务启用IIS压缩?,wcf,compression,Wcf,Compression,我目前为我的WCF服务使用一个定制的gzip编码器。如果可能的话,我想用内置的IIS7压缩替换它。我在网上找不到关于如何做到这一点的信息 有没有办法为WCF服务启用IIS 7压缩? 您知道.Net 4是否支持这一点吗 编辑6月15日:我仍在寻找一种方法,用主流方法取代我们的定制gzip编码器,因此如果您知道如何使用.Net 4和IIS 7实现这一点,请回答这个问题 谢谢 侧栏:我尝试手动执行此操作 由于我找不到如何通过简单地转动几个旋钮来实现这一点,我决定尝试手动启用它 到目前为止,我已经:

我目前为我的WCF服务使用一个定制的gzip编码器。如果可能的话,我想用内置的IIS7压缩替换它。我在网上找不到关于如何做到这一点的信息

有没有办法为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,deflate
http头

所以我

  • 使用
    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
POST/#############/MyService.svc HTTP/1.1
MIME版本:1.0
内容类型:多部分/相关;type=“应用程序/xop+xml”;
start=“”;
boundary=“uuid:一些uuid”;
start info=“应用程序/soap+xml”
接受编码:gzip,deflate
主持人:我的服务器名#############
内容长度:1753
预期:100人继续
但是服务器响应仍然没有被压缩

为什么服务器响应没有被压缩?我是否使用了正确的mime类型?一旦我让服务器返回一个压缩的答案,客户端会自动解压还是必须在客户端编写代码来解压



感谢您的帮助

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

这对IIS 6非常有用


(更新的URL)

我也有同样的问题。aspx页面已压缩,但WCF内容未压缩。它与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>

以下是我所做的(大部分步骤与前面提到的相同):

  • 为IIS角色安装动态压缩角色服务
  • 为用于承载WCF服务的网站启用动态内容压缩
  • 打开%SystemRoot%\system32\inetsrv\config\applicationhost.config并将相关内容类型添加到
  • 在这之后,它仍然不起作用
  • 我用Firefox的篡改数据检查了数据,发现返回的内容类型实际上是“application/xml;charset=utf-8”
  • 在将complete内容类型(包括“charset=utf-8”)添加到节中后,它起作用了:


因为我觉得字符集编码不应该决定压缩是否有效,所以我最终让IIS压缩所有的application/*内容类型

似乎可以通过GUI或CLI在IIS中启用动态压缩

本文向您展示了两种方式:

我发现GUI方法很简单。本文将向您展示如何确认它与Fiddler一起工作


干杯

我的问题似乎是重复的。这个问题适用于IIS 6,但我认为解决方案在这里也适用。如果是这样的话,我将以重复的形式结束这个问题。谢谢你的回答。我的客户端应用程序是一个基本的WinForms应用程序,因此我应该能够使用EnableDecompression。您的回答意味着您已经成功地在服务器上启用了压缩。是在IIS 7上吗?您是如何配置它的?知道我为什么不能让服务器返回压缩响应吗?这是一个死产品;-)提醒:先做备份。文件是
c:\windows\system32\inetsrv\config\applicationHost.config
<add mimeType="application/xml; charset=utf-8" enabled="true" />