开发者

How to determine WCF message size at the encoder level

开发者 https://www.devze.com 2023-01-12 06:48 出处:网络
I am building a custom encoder that 开发者_StackOverflowcompresses WCF responses.It is based on the Gzip encoder in Microsoft\'s WCF samples and this blog post:

I am building a custom encoder that 开发者_StackOverflowcompresses WCF responses. It is based on the Gzip encoder in Microsoft's WCF samples and this blog post:

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

I've got it all working, but now I would like to apply the compression only if the reply is beyond a certain size, but I am not sure how to retrieve the total size of the actual message from the encoder level.

I would need to get the message size at both the WriteMessage(...) method in the EncoderFactory, so I know whether to compress the message) and at the BeforeSendReply(...) method in the DispatchMessageInspector so that I can add the "gzip" ContentEncoding header to the response. Requests are always small and not compressed, so I don't need to worry about that.

Any help appreciated.

Jon.


I think you would do this in two stages. First, write a custom MessageEncoder that encodes the message to a byte[] just normal. Once you have the encoded byte-array (and this can be any message encoding format... Xml, Json, binary, whatever) you can examine the byte-array size and determine whether you want to create another compressed byte array.

Several resources you may find useful:

  • MSDN WCF Sample Code for a custom compression message encoder
  • Nicholas Allen's "Build a Custom Message Encoder" blog series. In this series He creates a "counting encoder" that basically wraps another encoder of any type and allows you to know what the encoded message size is (based on the byte[] size). You could probably adapt this and create a "ThresholdCompressionEncoder".


You can try calculating it based on reply.ToString.Length() and message.ToString.Length()

0

精彩评论

暂无评论...
验证码 换一张
取 消