在此 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%。很难说这是否与结果缺乏压缩有关。内存使用似乎根本不是问题。
我希望这更可靠和可预测!