我从WSDL URL生成了一个Proxy类。我可以向它发送请求,但我需要记录发送的XML。我该怎么做呢?
答案 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