2010-08-16 64 views
5

我正在構建壓縮WCF響應的自定義編碼器。它基於微軟WCF樣品中gzip的編碼器和這個博客帖子:如何在編碼器級別確定WCF消息大小

http://frenk.wordpress.com/2009/12/04/gzip-compression-wcfsilverlight/

我知道了所有的工作,但現在我想申請壓縮僅在回覆超過一定大小,但我不確定如何從編碼器級別檢索實際消息的總大小。

我需要在EncoderFactory的WriteMessage(...)方法中獲取消息大小,所以我知道是否壓縮消息)以及DispatchMessageInspector中的BeforeSendReply(...)方法,以便我可以將「gzip」ContentEncoding標頭添加到響應中。請求總是很小而且沒有壓縮,所以我不需要擔心這一點。

任何幫助表示讚賞。

Jon。

回答

0

你可以嘗試計算它的基礎上reply.ToString.Length()message.ToString.Length()

+0

感謝您的回答,但答覆和消息都是參考對象在那一點(我使用自定義內部編碼器),所以我不能得到這樣的長度。如果我深入研究這個對象,我可以得到實際的內容,它仍然是一個參考對象。我不確定如何在發送之前獲得序列化的原始數據。 – user250837 2010-08-17 11:21:57

2

我想你會分兩個階段執行此操作。首先,編寫一個自定義MessageEncoder,將消息編碼爲byte[],正常。一旦你有編碼的字節數組(這可以是任何消息編碼格式... Xml,Json,二進制,無論),你可以檢查字節數組的大小,並確定是否要創建另一個壓縮的字節數組。

一些資源可能對您有用: