爲了記錄目的,我想要獲取發送到我在WCF中實現的RESTful Web服務的原始請求。我已經實施了IDispatchMessageInspector
。在我的AfterReceiveRequest
的實現中,如果消息的內容無效,我甚至會(甚至尤其)吐出消息的原始字節。這是爲了調試目的。我的服務已經完美工作,但在處理與試圖調用服務的客戶相關的問題時,通常會幫助他們知道它發送的內容,即原始字節。如何在WCF中獲取請求的原始字節?
例如,假設他們不是發送格式良好的XML文檔,而是將字符串「your mama」發送到我的服務端點。我想看到他們就是這麼做的。不幸的是,使用MessageBuffer::CreateBufferedCopy()
將不起作用,除非消息的內容已經是格式良好的XML。
這裏的(大致)我已經在我的執行AfterReceiveRequest
:
// The immediately following line raises an exception if the message
// does not contain valid XML. This is uncool because I want
// the raw bytes regardless of whether they are valid or not.
using (MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue))
{
using (MemoryStream stream = new MemoryStream())
using (StreamReader reader = new StreamReader(stream))
{
buffer.WriteMessage(stream);
stream.Position = 0;
Trace.TraceInformation(reader.ReadToEnd());
}
request = buffer.CreateMessage();
}
我在這裏的猜測是,我需要在原始請求之前把它變成一個Message
。 WCF堆棧中的這個最有可能必須在IDispatchMessageInspector
的較低層次上完成。
任何人都知道如何做到這一點?
感謝谷歌!那就是訣竅。 – 2009-04-26 01:03:49