我正在构建一个压缩WCF响应的自定义编码器。它基于Microsoft的WCF示例中的Gzip编码器和此博客文章:
http://frenk.wordpress.com/2009/12/04/gzip-compression-wcfsilverlight/
我已经完成了所有工作,但现在我只想在回复超出一定大小时应用压缩,但我不确定如何从编码器级别检索实际消息的总大小。
我需要在EncoderFactory的WriteMessage(...)方法中获取消息大小,因此我知道是否压缩消息)和DispatchMessageInspector中的BeforeSendReply(...)方法以便我可以将“gzip”ContentEncoding标头添加到响应中。请求总是很小而且没有压缩,所以我不需要担心。
任何帮助表示感谢。
乔恩。
答案 0 :(得分:3)
我想你会分两个阶段来做这件事。首先,编写一个自定义MessageEncoder,将消息编码为byte[]
正常。一旦你有了编码的字节数组(这可以是任何消息编码格式...... Xml,Json,二进制等),你可以检查字节数组大小并确定是否要创建另一个压缩字节数组。
您可能会发现有用的几种资源:
byte[]
大小)。你可以调整它并创建一个“ThresholdCompressionEncoder”。答案 1 :(得分:0)
您可以尝试根据reply.ToString.Length()
和message.ToString.Length()