我有一個REST服務返回大量的XML,大約150K的價值。WCF REST壓縮
例如http://xmlservice.com/services/RestService.svc/GetLargeXML
因此,我想壓縮來自服務器的響應,因爲GZIP應該將其減小到更小。經過搜索,我無法爲我的生活找到一個如何爲WCF REST服務執行壓縮的例子。幫幫我!!
注意:我的服務由第三方託管,我不能通過IIS執行此操作,因爲它們不受其支持。
我有一個REST服務返回大量的XML,大約150K的價值。WCF REST壓縮
例如http://xmlservice.com/services/RestService.svc/GetLargeXML
因此,我想壓縮來自服務器的響應,因爲GZIP應該將其減小到更小。經過搜索,我無法爲我的生活找到一個如何爲WCF REST服務執行壓縮的例子。幫幫我!!
注意:我的服務由第三方託管,我不能通過IIS執行此操作,因爲它們不受其支持。
最簡單的方法是在servlet前面使用PLJ壓縮過濾器。
這看起來對接受編碼HTTP標頭,以確定是否客戶端可以接受壓縮的響應。它基本上只是將ServletOutputStream封裝在GZipOutputStream或DeflateerOutputStream中 - 非常簡單而且有用。從MSFT
它實際上是很容易做到這一點,至少在.NET 4.0(我沒有測試3.5)。我所做的只是讓IIS 7處理它。無需創建自定義壓縮過濾器。
首先,確保已經爲IIS 7安裝了動態壓縮功能。然後,在IIS管理器中選擇服務器並使用壓縮模塊打開動態壓縮。或者,您可以從命令行執行此操作:
C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true
接下來,編輯以下文件。你可能不得不復制它,而不是直接編輯配置(記事本++抱怨我),然後在準備好時覆蓋原文。
C:\Windows\System32\Inetsrv\Config\applicationHost.config
在那裏你會發現在<httpCompression>一個<dynamicTypes>部分。在<dynamicTypes>下,當客戶端發送Accept-Encoding:gzip頭時,您需要添加所有需要壓縮的MIME類型。例如:
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/xml" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
一旦你完成了這一切,回收你的應用程序池,你應該是好去。如果這不起作用,請嘗試重新啓動服務器並確保在應用程序級別和服務器級別啓用動態壓縮。
注意:根據我讀過的一些帖子,曾經有一個錯誤,你必須指定字符編碼(例如「application/json; charset = utf-8」)。但是,我沒有任何問題。
使用web.config也可以做到這一點,這樣更方便:http://codeasp.net/blogs/raghav_khunger/microsoft-net/1973/asp-net-enable-gzip-compression-via-web-config – 2012-04-10 17:50:19
謝謝,但不幸的是,這是一個WS(SOAP)解決方案,而不是REST(webHttp)。 – PhilJ 2009-09-09 22:26:47