我有一个REST服务,返回大量XML(约150k)。例如:http://xmlservice.com/services/RestService.svc/GetLargeXML。因此,我想压缩服务器的响应,使用GZIP可以将其减小到更小的大小。我已经搜索了所有地方,但无法找到如何为WCF REST服务执行压缩的示例。救命啊!注意:我的服务由第三方托管,我无法通过IIS进行操作,因为他们不支持。
对于.NET 4.0(我没有测试3.5版本),这其实是很容易做到的。我的方法只是让IIS 7来处理它,而不需要创建自定义压缩过滤器。
首先,确保已经安装了IIS 7的动态压缩功能。然后,在IIS管理器中选择服务器并使用压缩模块打开动态压缩功能。或者,您也可以通过命令行完成此操作:
C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true
C:\Windows\System32\Inetsrv\Config\applicationHost.config
在这里你会发现在 <httpCompression> 下有一个 <dynamicTypes> 部分。在 <dynamicTypes> 中,您需要添加所有您希望在客户端发送 Accept-Encoding: gzip 标头时压缩的 MIME 类型。例如:
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/xml" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
完成以上步骤后,请回收应用程序池,然后您就可以开始使用了。如果这样不行,请尝试重新启动服务器,并确保在应用程序级别和服务器级别都开启了动态压缩。
注意:根据我阅读的一些帖子,曾经存在一个错误,您必须指定字符编码(例如,“application/json; charset=utf-8”)。但是,我没有遇到任何问题。