Wcf IClientMessageInspector关联状态

Wcf IClientMessageInspector关联状态,wcf,Wcf,我找不到有关IClientMessageInspector接口的BeforeSendRequest方法返回值的更多信息。我发现的所有示例都返回null。根据MSDN上的描述,调用ReceiveReply后,此方法的返回值将作为correlationState参数传回。但是,MSDN还指出,最佳做法是为correlationState使用GUID 这句话让我有些困惑,因为我把它解释为我应该只为correlationState使用GUID。我想做的是使用请求的xml内容作为状态,这样,如果应答是错误

我找不到有关IClientMessageInspector接口的BeforeSendRequest方法返回值的更多信息。我发现的所有示例都返回null。根据MSDN上的描述,调用ReceiveReply后,此方法的返回值将作为correlationState参数传回。但是,MSDN还指出,最佳做法是为correlationState使用GUID

这句话让我有些困惑,因为我把它解释为我应该只为correlationState使用GUID。我想做的是使用请求的xml内容作为状态,这样,如果应答是错误的,我就可以记录请求和应答。我只想在回复错误时记录请求


有人有使用correlationState的经验吗?我能用它做我想用的吗?它似乎在测试中起作用,但由于我在这方面发现的信息量有限,我担心可能存在某种我没有看到的陷阱。

CorrelationState,顾名思义,旨在帮助您找到发送的请求和接收的回复之间的相关性。 因此,由于GUID是唯一标识符,MSDN建议将其用作关联状态

在BeforeSendRequest和AfterReceiverReply方法中,您可以记录相关状态值和消息对象(使用CreateBufferCopy/CreateMessage和其他消息类操作),并在发送的请求和接收的回复之间进行匹配

请注意,在此解决方案(以及任何其他纯WCF解决方案,顺便说一句)中,只有在回复为fault时才能记录请求。这是因为在WCF管道中没有位置,您可以同时获得请求和回复

正如您所提到的,这样做的唯一机会是使用消息(作为字符串或消息对象-同样,使用消息类操作)作为关联状态。 如果您的服务逻辑可以为相同的输入获得成功回复和错误回复,那么这不一定是一个好主意(例如,如果您的逻辑依赖于外部资源,如数据库或其他服务)