根据此MSDN文章Use AppCmd.exe to Configure IIS at Startup,我在Azure中为我的Web API配置了JSON压缩。
我发布了自己的角色并开始测试,根据Fiddler,一切都很好。
以下是一个示例请求标头:
GET http://x.cloudapp.net:8080/api/xyz HTTP/1.1
Accept: application/json
Host: x.cloudapp.net:8080
Accept-Encoding: gzip
以下是一个示例响应标头:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Expires: -1
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 18 Jul 2013 22:27:38 GMT
Content-Length: 2472
稍后只会进行一些Web API调用(比如6秒之后),所有响应都不再被压缩。
请求标题:
GET http://xyz HTTP/1.1
Accept: application/json
Host: sp-test-server2012.cloudapp.net:8080
Accept-Encoding: gzip
响应标题:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 18 Jul 2013 22:27:44 GMT
Content-Length: 16255
请注意第二个响应中缺少内容编码。
所以我得到了几百个被压缩的调用,然后其余的大多数都是未压缩的。我不时地看到另一个响应被压缩了。或者如果我停止测试一段时间然后恢复它似乎再次开始压缩。
IIS 8中的压缩是“受限制的”还是什么?比方说,如果CPU几乎达到最大值,IIS是否会停止压缩?
在Azure中监控我的WebRole时,在我的重负载测试期间,我的CPU使用率可以超过90%。很难说这是否与结果缺乏压缩相关。内存使用似乎根本不是问题。
我希望这更加可靠和可预测!
答案 0 :(得分:3)
好吧,显然昨天我的Google Fu让我失望了。我今天找到了答案,IIS确实会或者不会根据CPU使用情况动态压缩内容。 HTTP Compression
有两种设置可控制动态压缩。一个指定何时禁用:dynamicCompressionDisableCpuUsage
,默认为90%。另一个指定何时重新启用dynamicCompressionEnableCpuUsage
,默认为50%。
你学到的东西。
答案 1 :(得分:0)
本文可能有助于强制压缩:
ASP.NET Web API GZip compression ActionFilter with 8 lines of code
当然,他们会在重负荷情况下收取CPU时间。