跟踪/检查WCF客户端消息

跟踪/检查WCF客户端消息,wcf,iclientmessageinspector,Wcf,Iclientmessageinspector,我使用BeforeSendRequest()从客户端(实现IClientMessageInspector)发送消息,并从AfterReceivePly()的端点接收回复 我的问题是,“验证”我收到的回复是否与我发送的请求相关的最有效方式是什么 我找到了一些关于使用correlationstate的文章,但是这些例子太多了 非常感谢您的帮助。据我所知,我们可以使用Correlationstate参数来维护该值以表示相关性。 这就是为什么beoferendrequest具有返回值的原因 public

我使用BeforeSendRequest()从客户端(实现IClientMessageInspector)发送消息,并从AfterReceivePly()的端点接收回复

我的问题是,“验证”我收到的回复是否与我发送的请求相关的最有效方式是什么

我找到了一些关于使用correlationstate的文章,但是这些例子太多了


非常感谢您的帮助。

据我所知,我们可以使用
Correlationstate
参数来维护该值以表示相关性。 这就是为什么
beoferendrequest
具有返回值的原因

public void AfterReceiveReply(ref Message reply, object correlationState)
{
    Console.WriteLine(correlationState.ToString());
    string displayText = $"the client has received the reply:\n{reply}\n";
    Console.Write(displayText);
}

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    var correlationstate = Guid.NewGuid().ToString();
    string displayText = $"the client send request message:\n{request}\n";
    Console.WriteLine(displayText);
    return correlationstate;
}
下面是一个相关的讨论,希望对您有用。


如果有什么我可以帮忙的,请随时告诉我。

Ab…谢谢…这很有帮助…您对在Inspector中保存在BeforeSendRequest()中创建的correlationstate副本并在AfterReceivePly()中使用它进行验证有何看法?您的意思是我们创建了一个全局变量,对吗?来自不同客户端的所有请求都可以触发这两种方法。我认为这可能是不可行的。假设要调用的实际方法存在滞后。最后一个请求将获得最新的响应。它可能出错。不,不是全局变量,而是实例级属性WCF服务的默认实例模式是InstanceContextMode.PerCall。除非我们手动将服务实例模式指定为InstanceContextMode.Single,否则每次调用中都会实例化一个新实例。