0

我有一个实现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;
    }
}

在浏览器中回复:

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 回答