我正在实现 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
}
查看手表时, request.messageData 似乎包含正文 - 但这是一个私人成员。
如何在不尝试反序列化的情况下获取消息缓冲区?