2009-04-25 51 views
1

爲了記錄目的,我想要獲取發送到我在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的較低層次上完成。

任何人都知道如何做到這一點?

回答