好吧,当我想查看与 WCF 交换的所有消息时,我通常使用这种技术。
示例:以下示例是 WCF 中的 RESTFull 调用,但该技术适用于使用 WCF 完成的所有类型的通信。
using (WebChannelFactory<ITestService> cf = new WebChannelFactory<ITestService>(new Uri("http://172.80.1.235/")))
{
((WebHttpBinding)cf.Endpoint.Binding).MaxReceivedMessageSize = 2147483647;
cf.Endpoint.Behaviors.Add(new RestMessageInspector());
ITestService channel = cf.CreateChannel();
TestJob job = channel.CancelJob(id, new MemoryStream(Encoding.UTF8.GetBytes("<cancel></cancel>")));
}
在这个例子中我们可以看到cf.Endpoint.Behaviors.Add(new RestMessageInspector()); 这将使您能够跟踪所有通信。
类 RestMessageInspector 需要创建如下:(需要实现两个接口 IClientMessageInspector 和 IEndpointBehavior)
public class RestMessageInspector : IClientMessageInspector, IEndpointBehavior
{
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
{
return null;
}
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(this);
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
}
然后使用断点,您将能够跟踪整个过程;)并查看所有消息!
总之,要点是包括实现这些接口的额外行为。
我希望它会帮助你!