反序列化前获取WCF消息体

use*_*748 5 c# wcf message

我正在实现 WCF 服务,该服务公开一个方法,该方法[OperationContract][XmlSerializerFormat]. 有时我会收到请求体,其正文不是有效的 XML。在这种情况下,我想记录原始正文,这样我就可以知道为什么它不构成有效的 XML。但是,我无法从 Message 对象获取它,请参阅我的尝试(通过实现 IDispatchMessageInspector 接口):

    public object IDispatchMessageInspector.AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        request.ToString();  // "... Error reading body: System.Xml.XmlException: The data at the root level is invalid. Line 1, position 1. ..."
        request.WriteBody(...);   // Serialization Exception, also in WriteMessage and other Write* methods
        request.GetReaderAtBodyContents(...);   // Same
        HttpRequestMessageProperty httpRequest = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];  // no body in httpRequest
    }
Run Code Online (Sandbox Code Playgroud)

当查看手表时,request.messageData 似乎包含正文 - 但这是一个私有成员。

如何获取消息缓冲区而不尝试反序列化它?

RQD*_*QDQ -1

更新

其他一些遇到此问题的人似乎已经创建了客户消息编码器

消息编码绑定元素序列化输出消息并将其传递到传输层,或者从传输层接收消息的序列化形式并将其传递到协议层(如果存在),或者传递到应用程序(如果不存在)。