WCF REST压缩

Phi*_*ilJ 7 compression rest wcf gzip

我有一个REST服务,返回大量的XML,大约150k.

例如 http://xmlservice.com/services/RestService.svc/GetLargeXML

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

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

kgr*_*ffs 6

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

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

C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true 
Run Code Online (Sandbox Code Playgroud)

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

C:\Windows\System32\Inetsrv\Config\applicationHost.config
Run Code Online (Sandbox Code Playgroud)

在那里,您将在<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>
Run Code Online (Sandbox Code Playgroud)

完成所有这些后,回收您的应用程序池,您应该很高兴.如果这不起作用,请尝试重新启动服务器并确保在应用程序级别和服务器级别打开动态压缩.

注意:根据我读过的一些帖子,曾经有一个错误,你必须指定字符编码(例如,"application/json; charset = utf-8").但是,我没有任何问题.