我在Azure中爲我的Web API配置了JSON壓縮,請參閱此MSDN文章Use AppCmd.exe to Configure IIS at Startup。JSON內容壓縮在Azure WebRole一段時間後停止工作
我發佈我的角色並開始測試,根據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
就在幾個網頁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%。很難判斷這是否與結果缺乏壓縮相關。內存使用似乎不是一個問題。
我希望這是更可靠和可預測的!