ええと、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 は次のように作成する必要があります (2 つのインターフェイス 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)
{
}
}
次に、ブレークポイントを使用すると、プロセス全体をたどることができます;)そしてすべてのメッセージを見ることができます!
結論として、主なポイントは、これらのインターフェイスを実装する追加の動作を含めることです。
それがあなたを助けることを願っています!