我有一个实现IDispatchMessageInspector的类 MessageInspector ,并且在它的 BeforeSendReply 方法中,我拦截了所有 WCF 回复,因此我可以在发送消息之前压缩数据。数据是一个字节数组。
问题是当我使用压缩的 ByteArray 重新构造消息时,WCF 将消息编码为 Base64String 然后将其发送出去,有没有办法禁用这种自动编码?
代码:
public void BeforeSendReply(ref Message reply, object correlationState)
{
if (!reply.IsFault && !reply.IsEmpty)
{
//read json
XmlDictionaryReader bodyReader = reply.GetReaderAtBodyContents();
MemoryStream ms = new MemoryStream();
XmlDictionaryWriter jsonWriter = JsonReaderWriterFactory.CreateJsonWriter(ms);
jsonWriter.WriteNode(bodyReader, true);
jsonWriter.Flush();
//compress data
byte[] ba = ms.ToArray();
byte[] data = ZLibCompressor.Compress(ba);
//rebuild and send reply
Message newReply = Message.CreateMessage(MessageVersion.None, null, data);
reply = newReply;
}
}
在浏览器中回复: