2009-09-09 67 views
7

我有一個REST服務返回大量的XML,大約150K的價值。WCF REST壓縮

例如http://xmlservice.com/services/RestService.svc/GetLargeXML

因此,我想壓縮來自服務器的響應,因爲GZIP應該將其減小到更小。經過搜索,我無法爲我的生活找到一個如何爲WCF REST服務執行壓縮的例子。幫幫我!!

注意:我的服務由第三方託管,我不能通過IIS執行此操作,因爲它們不受其支持。

回答

-1

下面是可能適用的鏈接:

WS-Compression for WCF

最起碼,應該把你在正確的軌道上。

+2

謝謝,但不幸的是,這是一個WS(SOAP)解決方案,而不是REST(webHttp)。 – PhilJ 2009-09-09 22:26:47

-2

最簡單的方法是在servlet前面使用PLJ壓縮過濾器。

PJL Compression Filter

這看起來對接受編碼HTTP標頭,以確定是否客戶端可以接受壓縮的響應。它基本上只是將ServletOutputStream封裝在GZipOutputStream或DeflateerOutputStream中 - 非常簡單而且有用。從MSFT

+0

這是一個在IIS上運行的WCF服務,所以J2EE servlet過濾器顯然不是一種選擇。 – PhilJ 2009-09-10 22:48:28

+0

我的壞,沒有一個線索什麼WCF - 認爲這是另一個Java類型的框架。 – Gandalf 2009-09-11 15:12:52

6

它實際上是很容易做到這一點,至少在.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」)。但是,我沒有任何問題。

+1

使用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