我目前在我的WCF服务中使用自定义gzip编码器。如果可能的话,我想用内置的IIS 7压缩替换它。我无法在网上找到有关如何做到这一点的信息。
有没有办法为WCF服务启用IIS 7压缩? 你知道这是否会得到.Net 4开箱即用的支持吗?
编辑6月15日: 我仍然在寻找一种方法来用主流方法替换我们的自定义gzip编码器,所以如果你知道如何做到这一点使用.Net 4和IIS 7,请回答这个问题。
由于
补充工具栏:我尝试手动执行此操作
由于我无法通过简单地转动几个旋钮来找到它,我决定尝试手动启用它。
到目前为止,我有:
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
但服务器响应仍未压缩。
为什么服务器响应未压缩?我使用过正确的mime类型吗?一旦我让服务器返回一个压缩的答案,客户端会自动解压缩它还是必须在客户端写代码才能解压缩?
感谢您的帮助
答案 0 :(得分: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>
这就是我所做的(大部分已经提到的相同步骤):
<add mimeType="application/xml; charset=utf-8" enabled="true" />
由于我觉得字符集编码不应该确定压缩是否有效,我最终让IIS压缩所有application / *内容类型。
答案 1 :(得分:1)
也许这取决于您使用的特定WCF服务设置,但对于我使用它的应用程序(所有这些都是.NET应用程序和Silverlight页面的混合访问),生成的WCF客户端类包含EnableDecompression属性,可以设置为true。之后,我的Winforms应用程序发送正确的标题,并正确压缩了Web服务通信。
答案 2 :(得分:1)
这对IIS 6很有用
http://ramon.bloggingabout.net/2008/11/06/wcf-and-http-gzipdeflate-compression-and-silverlight/
(更新后的网址)
答案 3 :(得分:1)
您似乎可以通过GUI或CLI在IIS中启用动态压缩。
本文向您展示了两种方式:
我发现GUI很简单。文章向您展示了如何确认它与Fiddler合作。
干杯!