WCF REST压缩

时间:2009-09-09 21:45:36

标签: wcf rest compression gzip

我有一个REST服务,它返回大量的XML,价值大约150k。

e.g。 http://xmlservice.com/services/RestService.svc/GetLargeXML

因此我想压缩来自服务器的响应,因为GZIP应该将其减少到更小的范围。在我到处搜索我无法找到如何为WCF REST服务执行压缩的示例。帮助!

注意:我的服务由第三方托管,我不能通过IIS执行此操作,因为它们不支持。

1 个答案:

答案 0 :(得分:6)

实际上很容易做到这一点,至少在.NET 4.0中(我没有用3.5测试)。我所做的只是让IIS 7来处理它。无需创建自定义压缩过滤器。

首先,确保已为IIS 7安装了动态压缩功能。然后,在IIS管理器中选择服务器并使用压缩模块打开动态压缩。或者,您可以从命令行执行此操作:

C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true 

接下来,编辑以下文件。您可能需要复制它而不是直接编辑配置(Notepad ++对我抱怨),然后在准备好时覆盖原始文件。

C:\Windows\System32\Inetsrv\Config\applicationHost.config

在那里你会找到一个< dynamicTypes> < httpCompression>下的部分。在< 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”)。但是,我没有任何问题。