关联是将工作流服务消息彼此或应用程序实例状态(例如回复初始请求)或特定订单 ID 关联到订单处理工作流持久状态的机制。 本主题概述了相关性。 本节中的其他主题为每种关联类型提供其他信息。
关联类型
相关性可以是基于协议的,也可以是基于内容的。 基于协议的相关性使用消息传递基础结构提供的数据来提供消息之间的映射。 使用基于协议的相关性来关联的消息可以通过内存中的对象(例如 RequestContext)或传输协议提供的令牌相互关联。 基于内容的相关性使用应用程序指定的数据将消息相互关联。 使用基于内容的相关关联的消息由消息中的某些应用程序定义数据(例如客户编号)相互关联。
参与关联的活动使用 a CorrelationHandle 将消息传递活动关联在一起。 例如,用于调用服务的 Send 和用于从服务接收回调的后续 Receive 共享相同的 CorrelationHandle。 无论关联是基于内容还是基于协议,都使用此基本模式。 可以在每个活动上显式设置相关句柄,也可以将活动包含在 CorrelationScope 活动中。 包含在 CorrelationScope 内的活动,其关联句柄由 CorrelationScope 管理,因此不需要显式设置 CorrelationHandle。 CorrelationScope 范围为请求-答复相关提供 CorrelationHandle 管理,并提供一个附加相关类型。 使用 WorkflowServiceHost 托管的工作流服务具有与 CorrelationScope 活动相同的默认关联管理。 此默认相关管理通常意味着在许多情况下,CorrelationScope 或工作流服务中的消息传递活动不需要设置其 CorrelationHandle,除非有多个消息传递活动并行或重叠,例如,有两个并行 Receive 活动,或两个 Send 活动后跟两个 Receive 活动。 本部分中的主题提供了有关默认相关性的详细信息,这些主题涵盖了每种特定类型的关联。 有关消息活动的详细信息,请参阅消息活动和作方法:使用消息传送活动创建工作流服务。
基于协议的相关
基于协议的关联使用传输机制将消息彼此和相应的实例关联。 某些系统提供的协议关联包括请求-回复关联和基于上下文的相关性。 请求-回复关联用于关联单个消息活动对,以形成双向操作,例如 Send 与 ReceiveReply 配对,或 Receive 与 SendReply 配对。 Visual Studio 工作流设计器还提供一组活动模板来快速实现此模式。 上下文相关性是基于.NET 上下文交换协议规范中描述的上下文交换机制。 若要使用基于上下文的关联,基于上下文的绑定(例如 BasicHttpContextBinding, WSHttpContextBinding 或 NetTcpContextBinding 必须在终结点上使用)。
有关协议关联的详细信息,请参阅 Durable Duplex 和 Request-Reply。 有关使用 Visual Studio 工作流设计器活动模板的详细信息,请参阅 消息传送活动。 有关示例代码,请参阅 NetContextExchangeCorrelation 示例。
基于内容的相关性
基于内容的关联使用消息中的一些信息将其关联到特定实例。 与基于协议的相关性不同,基于内容的相关性要求应用程序作者显式声明可在每个相关消息中找到此数据的位置。 使用基于内容的相关性的活动通过使用MessageQuerySet指定此消息数据。 与不使用某个上下文绑定(如 BasicHttpContextBinding)的服务进行通信时,基于内容的相关非常有用。