我正在實現WCF服務,該服務公開的方法的[OperationContract]
爲[XmlSerializerFormat]
。我有時會收到其身體不是有效XML的請求。在這種情況下,我想記錄原始主體,所以我可以知道它爲什麼不構成有效的XML。然而,我無法從Message對象得到它,看到我的企圖(通過實現IDispatchMessageInspector接口):在反序列化之前獲取WCF消息主體
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似乎包含身體 - 但是這是一個私有成員。
如何獲得消息緩衝區而不嘗試反序列化它?
我實現了IDispatchMessageInspector接口 - 現在修復了問題文本。我無法獲取原始郵件正文,以防它首先不是XML ... – user1545748 2012-07-23 12:55:11
看起來您可能需要實施客戶郵件編碼器。我已經用一些額外的信息更新了我的答案。 – RQDQ 2012-07-23 15:28:51