0

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;
    }
}

ブラウザで返信:

WCF Firefox で返信を受け取る

4

1 に答える 1

1

おそらくここで答えます:

WCF を使用した base64 エンコーディングの回避

http://social.msdn.microsoft.com/Forums/en/wcf/thread/c32a34c3-dfda-4c54-ab13-fd595fb883ab

これを見てください... CreateBinaryWriter を使用してメッセージをバイナリとして書き込むことができるかもしれません。

カスタム WCF メッセージをサービスに送信する

http://www.techbubbles.com/webservices/wcf-service-using-mtom-in-net-fw-4/

于 2012-07-24T22:58:14.533 に答える