如何为WCF服务启用IIS压缩?
我目前为我的WCF服务使用一个定制的gzip编码器。如果可能的话,我想用内置的IIS7压缩替换它。我在网上找不到关于如何做到这一点的信息 有没有办法为WCF服务启用IIS 7压缩? 您知道.Net 4是否支持这一点吗 编辑6月15日:我仍在寻找一种方法,用主流方法取代我们的定制gzip编码器,因此如果您知道如何使用.Net 4和IIS 7实现这一点,请回答这个问题 谢谢如何为WCF服务启用IIS压缩?,wcf,compression,Wcf,Compression,我目前为我的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”
Accept-Encoding:gzip,deflate
http头
所以我
- 使用
类及其OperationContextScope
将其手动添加到所有传出呼叫中。(如果我找到了解决方案,我将在稍后发布详细信息)OutgoingMessageProperties
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" />