WCF检查消息

WCF检查消息,wcf,message,inspector,Wcf,Message,Inspector,我正在尝试实现一个简单的消息检查器,它从一个示例中将消息写入调试窗口: 回复如预期的那样。但是,请求似乎为空。对可能出现的问题有什么想法吗?我正在使用一个服务引用代理和一个控制台应用程序作为客户端 我正在使用basicHttpbinding和托管IIS与svc文件。我的web方法的参数是复杂类型。我不确定这是否有区别 首先尝试消息请求的CreateBufferedCopy(即克隆):(将消息复制到缓冲区中) 更多信息请参见“现在查看消息检查部分”:我已经复制并粘贴了MyMessageInspec

我正在尝试实现一个简单的消息检查器,它从一个示例中将消息写入调试窗口:

回复如预期的那样。但是,请求似乎为空。对可能出现的问题有什么想法吗?我正在使用一个服务引用代理和一个控制台应用程序作为客户端

我正在使用basicHttpbinding和托管IIS与svc文件。我的web方法的参数是复杂类型。我不确定这是否有区别

首先尝试消息请求的CreateBufferedCopy(即克隆):(将消息复制到缓冲区中)


更多信息请参见“现在查看消息检查部分”:

我已经复制并粘贴了MyMessageInspector类,并将该行为添加到我的my web服务中,它工作正常-调用web服务时,SOAP信封打印为XML

你的项目中还有其他的项目吗?如果是这样,则其中一个可能正在设置
request=null
——这将导致出现问题,因为request参数是
ref


如果不是,是什么让您说请求为空?您是否在
Debug.WriteLine(..)
语句中收到NullReferenceException?

谢谢您提供的信息。我试图创建一个缓冲区,但仍然不起作用。我也将在您的链接中尝试该示例。Request.ToString()不需要请求缓冲区。MSDN链接状态与“提取邮件正文数据”有关:无论如何访问邮件正文,您只能访问一次。消息对象有一个State属性,该属性最初设置为Created。前面列表中描述的三种访问方法分别将状态设置为写入、读取和复制。此外,当不再需要消息正文内容时,Close方法可以将状态设置为Closed。消息正文只能在创建状态下访问,并且在状态更改后无法返回到创建状态。但是如果
request==null
,我们如何使用
CreateBufferedCopy
来解决问题?
public class MyMessageInspector : IDispatchMessageInspector
{
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        System.Diagnostics.Debug.WriteLine(request.ToString());
        return null;
    }

    public void BeforeSendReply(ref Message reply, object correlationState)
    {
        System.Diagnostics.Debug.WriteLine(reply.ToString());
    }
}