我无法找到有关IClientMessageInspector接口的BeforeSendRequest方法的返回值的更多信息。我发现的所有示例都返回null。从MSDN上的描述中,一旦调用AfterReceiveReply,此方法的返回值将作为correlationState参数传回。但是,MSDN还声明最佳做法是为correlationState使用GUID。
这句话让我感到有些困惑,因为我将其解释为意味着我应该只使用GUID作为correlationState。我想要做的是使用请求的xml内容作为状态,这样如果回复是一个错误,我可以记录请求和回复。如果回复是错误,我只想记录请求。
有没有人有使用correlationState的经验?我可以将它用于我想用它吗?它似乎在测试中起作用,但由于我在此发现的信息量有限,我担心可能会出现一些我没有看到的陷阱。
答案 0 :(得分:6)
CorrelationState,因为它的名称,旨在帮助您找到已发送请求和收到的回复之间的相关性。 因此,由于GUID是唯一标识符,因此MSDN建议将其用作关联状态。
在BeforeSendRequest和AfterReceiveReply方法中,您可以记录关联状态值和Messages对象(使用CreateBufferCopy / CreateMessage和其他Message类操作),并在发送的请求和收到的回复之间进行匹配。
请注意,在此解决方案(以及任何其他纯WCF解决方案,BTW)中,只有在回复错误时才能记录请求。这是因为WCF管道中没有地方可以同时请求和回复。
正如您所提到的,唯一的机会是使用消息(作为字符串或Message对象 - 再次使用Message类操作)作为关联状态。 如果您的服务逻辑可以获得相同输入的成功回复和错误回复(例如,如果您的逻辑依赖于外部资源作为数据库或其他服务),则这不一定是个好主意。