IIS 7中的JSON Web服务响应压缩

时间:2010-03-20 06:34:49

标签: asp.net web-services json iis-7 compression

我遇到JSON响应压缩问题。在将网站上传到生产服务器(Windows 2008,IIS 7)后,我会查看响应标头,并找到未压缩的响应。在IIS控制面板中启用“启用静态压缩”和“启用动态压缩”不起作用.ASPX页面响应gzip,但webservice响应未压缩。

我看了谷歌,但没有找到关于这个麻烦的答案。此外,我尝试这种json ihttpmodule compression方式(并添加到web.config这个模块) - 但是这个源非常适合在开发机器上使用ASP.NET开发服务器(并且减少了七倍的响应大小)并完全忽略了IIS7。

如何将gzip压缩应用于我的webservice的json响应?感谢。

PS .NET 3.5

3 个答案:

答案 0 :(得分:3)

我偶然发现了与JsonCompressionModule相同的问题。它在开发服务器上工作但在IIS 7上没有工作。我发现在IIS 7下,仅在system.web下添加句柄是不够的,但在system.webServer下也是如此(见下文)。在此更改后,它在IIS 7上正常工作。

<system.web>
 <httpModules>
   <add name="JsonCompressionModule" type="JsonCompressionModule"/>
 </httpModules>
</system.web>

<system.webServer>
 <modules>
  <add name="JsonCompressionModule" preCondition="managedHandler" type="JsonCompressionModule"/>
 </modules>
</system.webServer>

答案 1 :(得分:2)

IIS动态压缩使用响应内容类型标头来确定它是否应该压缩内容。默认设置不压缩“application / json”。您可以在http://www.iis.net/configreference/system.webserver/httpcompression

找到更多信息

要添加它,请打开管理命令提示符,运行以下命令,然后重新启动IIS服务。

cd \Windows\System32\inetsrv
appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost

您可能想要添加一些其他内容类型。默认动态设置压缩的唯一应用程序/ *类型是application / x-javascript。

答案 2 :(得分:0)

请尝试检查客户端发送的请求标头。 Accept-Encoding应具有gzip或deflate值。 确保客户端能够解压缩JSON。 有一种解决方案能够设置Accept-Encoding并一起执行GZIP压缩 - Helicon Ape(http://www.helicontech.com/ape/)。以下配置将执行两个技巧:

# Manually set required request header
RequestHeader append Accept-Encoding gzip early

# Enable high-level (9) comression for JSON files
SetEnvIf mime application/json gzip=9