3

我找不到太多关于 IClientMessageInspector 接口的 BeforeSendRequest 方法的返回值的信息。我发现的所有示例总是返回 null。根据 MSDN 上的描述,一旦调用 AfterReceiveReply,此方法的返回值将作为相关性状态参数传回。但是,MSDN 还指出,最佳实践是为相关状态使用 GUID。

这句话让我有些困惑,因为我将其解释为我应该只对相关状态使用 GUID。我想要做的是使用请求的 xml 内容作为状态,这样如果回复是错误的,我可以同时记录请求和回复。如果回复是错误的,我只想记录请求。

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

4

1 回答 1

6

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

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

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

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

于 2012-09-15T08:24:29.293 回答