2009-11-07 195 views
2

我有一個由.NET應用程序(而不是IIS)公開的ADO.NET數據服務,它由.NET客戶端應用程序使用。對此數據服務的某些調用會返回大量數據。ADO.NET數據服務的數據壓縮

我想壓縮導線上的XML數據以減少負載並提高性能。這可能嗎?

+0

由於ado.net數據服務通過http工作,這是否意味着您的應用程序正在運行嵌入式http服務器?這聽起來不像標準設置。是否asp.net參與?您可能需要爲這個問題提供更多技術細節。 – jthg 2009-11-11 04:54:25

回答

9

我假設你在你的.NET「應用程序」中是hosting using WCF?如果是這樣,您需要編寫一些自定義的MessageEncoder實現,因爲WCF不提供這種開箱即用的功能。幸運的是,您可以使用a sample in the SDK

我其實只是意識到,這只是第一步的兩個取決於你的客戶端是否也是WCF?雖然這將對郵件進行編碼,但它需要您的客戶端使用類似配置的解碼器,因爲該實現將而不是設置必要的HTTP標頭,以表示向「純」HTTP客戶端發出了編碼。因此,如果它不是另一邊的WCF客戶端,除了編碼消息本身之外,還需要使用WebOperationContext來應用合適的Content-Encoding: gzip標頭。不幸的是,您不能在MessageEncoder實現本身內部執行此操作,因爲在此過程中太晚了,因爲在請求MessageEncoder寫入消息內容時,消息幀(在本例中爲HTTP標頭)已寫入。所以,你還需要額外的行爲,以IOperationBehavior的形式應用於相應設置標題的操作。

+0

這不是真正的自定義消息編碼,因爲它只是使用gzip,因爲它的編碼器。 – Earlz 2009-11-12 17:54:49

+0

當然。對不起,錯字,我的意思是寫「消息編碼*呃*」,而不是「消息」編碼*「*」。 – 2009-11-12 18:04:18

0

您可以使用GZipStream來壓縮和解壓縮它。

+0

你能舉個例子嗎? – 2009-11-08 11:54:24

+0

如果您點擊鏈接。你看到如何壓縮字節數組的示例 – EKS 2009-11-08 16:54:30

+0

是的,但是如何壓縮通過ADO.NET數據服務傳遞的消息? – 2009-11-08 17:11:30