2

在此 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

请注意第二个响应中缺少的Content-Encoding

所以我收到了几百个被压缩的调用,然后其余的大部分都是未压缩的。时不时地,我可以看到另一个响应被压缩。或者,如果我停止测试一段时间然后恢复,似乎压缩又开始了。

IIS 8 中的压缩是“节流”还是什么?比如说,如果 CPU 快用完了,IIS 会停止压缩吗?

在 Azure 中监视我的 WebRole 时,我的 CPU 使用率在我的重负载测试期间可能会超过 90%。很难说这是否与结果缺乏压缩有关。内存使用似乎根本不是问题。

我希望这更可靠和可预测!

4

2 回答 2

3

好吧,显然昨天我的 Google Fu 让我失望了。我今天找到了答案,IIS 确实会或不会根据 CPU 使用情况动态压缩内容。HTTP 压缩

有两个设置可以控制动态压缩。一指定何时禁用:dynamicCompressionDisableCpuUsage,默认为 90%。另一个指定何时重新启用dynamicCompressionEnableCpuUsage,默认为 50%。

你学到的东西。

于 2013-07-19T22:47:14.163 回答
0

本文可能有助于强制压缩:

ASP.NET Web API GZip 压缩 ActionFilter 用 8 行代码

当然,他们会在高负载情况下对 CPU 时间收费。

于 2014-07-17T09:16:02.107 回答