如何记录代理类发送到Web服务的XML?

时间:2010-11-29 08:03:54

标签: c# web-services

我从WSDL URL生成了一个Proxy类。我可以向它发送请求,但我需要记录发送的XML。我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

我已经通过实现IDispatchMessageInspector完成了这个服务器端,如here所述。但是,我相信您可以通过实现IClientMessageInspector接口在客户端执行相同的操作。

如果我没记错的话,Message。ToString()方法会返回可以直接放入日志的SOAP。

然而,我认为只是服务器端的问题,但我会在这里提及,因为它可能不是。

Message类只能读取一次。由于您要拦截消息以进行记录,因此您需要确保避免将其标记为副作用。你必须像这样克隆它:

public class ClientMessageLogger : IClientMessageInspector
{
    public void AfterReceiveReply(
        ref System.ServiceModel.Channels.Message reply, object correlationState)
    {
        // Do nothing.
    }

    public object BeforeSendRequest(
        ref System.ServiceModel.Channels.Message request, IClientChannel channel)
    {
        // Create a buffer.
        MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);

        // Set the request reference to an unspoiled clone.
        request = buffer.CreateMessage();

        // Make another unspoiled clone to process (taint) locally within this method.
        Message originalMessage = buffer.CreateMessage();

        // Log the SOAP xml.
        Log(originalMessage.ToString());

        return null;
    }
}

答案 1 :(得分:1)

如果您不使用WCF,也可以启用SOAP日志记录:

http://msdn.microsoft.com/en-us/library/esw638yk(VS.71).aspx

答案 2 :(得分:0)

您不需要自己编写代码来执行此操作:只需configure WCF message logging

相关问题