WCF检查消息

3
我正在尝试实现一个简单的消息检查器,它可以从 MSDN 的示例中将消息写入调试窗口。
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());
    }
}

回复按预期编写。但请求似乎为空。有什么想法,可能出了什么问题?我正在使用服务引用代理作为客户端的控制台应用程序。
我正在使用basicHttpbinding,并使用svc文件在IIS上进行托管。我的Web方法的参数是一个复杂类型。我不确定这是否有所不同。
2个回答

1

谢谢提供的信息。我尝试了创建缓冲区,但仍然不起作用。我也会尝试您链接中的示例。 - Quadwwchs
request.ToString() 不需要请求缓冲区。 - Greg Sansom
1
MSDN链接在“提取消息正文数据”方面说明:无论如何访问消息,您只能访问一次消息正文。消息对象具有状态属性,最初设置为Created。前面列表中描述的三种访问方法分别将状态设置为Written、Read和Copied。此外,当不再需要消息正文内容时,Close方法可以将状态设置为Closed。只能在创建状态下访问消息正文,在状态改变后无法返回到创建状态。 - Rebecca
但是如果 request == null,我们如何使用 CreateBufferedCopy 来解决这个问题呢? - Greg Sansom

0

我已经复制并粘贴了MyMessageInspector类,并将其添加到我的Web服务中,它可以正常工作 - 当调用Web服务时,SOAP包将以XML格式打印出来。

你的项目中是否有其他的MessageInspectors?如果有,可能其中一个正在设置request = null - 这会导致你遇到的问题,因为request参数是ref

如果没有,那么你是怎么知道request是null的呢?你在Debug.WriteLine(..)语句上是否遇到了NullReferenceException异常?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接