2010-11-29 45 views
0

我从WSDL URL生成一个Proxy类。我可以向它发送请求,但我需要记录发送的XML。我会怎么做呢?如何记录我的代理类发送到Web服务的XML?

+0

这是发生在客户端,还是服务器端日志解决方案也可以接受? – 2010-11-29 08:43:47

+0

我不是在控制服务器端,所以它必须是客户端。 – 2010-11-29 08:53:30

回答

1

我已经描述here实施IDispatchMessageInspector这样做的服务器端。不过,我相信你可以通过实现接口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; 
    } 
} 
+0

谢谢。这使我走上了正轨。 – 2010-11-29 14:14:22