【问题标题】:IClientMessageInspector CorrelationStateIClientMessageInspector CorrelationState
【发布时间】:2012-09-14 22:35:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2019-05-18
      • 1970-01-01
      • 2011-07-31
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多