WCF REST压缩

7
我有一个REST服务,返回大量XML(约150k)。例如:http://xmlservice.com/services/RestService.svc/GetLargeXML。因此,我想压缩服务器的响应,使用GZIP可以将其减小到更小的大小。我已经搜索了所有地方,但无法找到如何为WCF REST服务执行压缩的示例。救命啊!注意:我的服务由第三方托管,我无法通过IIS进行操作,因为他们不支持。
1个回答

7

对于.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

在这里你会发现在 <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”)。但是,我没有遇到任何问题。


1
可以使用web.config来完成相同的操作,这更加方便:http://codeasp.net/blogs/raghav_khunger/microsoft-net/1973/asp-net-enable-gzip-compression-via-web-config - Karel Kral

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接