IDispatchMessageInspectorを実装するクラス MessageInspector があり、その BeforeSendReply メソッドですべての WCF 応答をインターセプトして、メッセージが送信される前にデータを圧縮できるようにします。データは ByteArray です。
問題は、圧縮された 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;
}
}
ブラウザで返信: