2009-04-25 56 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的较低层次上完成。

任何人都知道如何做到这一点?

回答