WorkflowServiceHost 为工作流服务提供主机。 它负责侦听传入消息并将其路由到相应的工作流服务实例,控制空闲工作流的卸载和持久化,等等。 本主题介绍 WorkflowServiceHost 如何处理传入消息。
WorkflowServiceHost 概述
该 WorkflowServiceHost 类用于托管工作流服务。 它会侦听传入消息,并将其路由到相应的服务实例,根据需要创建新实例或从持久存储加载现有实例。 下图大致说明了工作原理 WorkflowServiceHost :
此图显示了 WorkflowServiceHost 从 .xamlx 文件加载工作流服务定义并从配置文件加载配置信息。 它还会从跟踪配置文件加载跟踪配置。 WorkflowServiceHost 公开一个工作流控制终结点,该终结点允许向工作流实例发送控制作。 有关详细信息,请参阅 工作流控制终结点示例。
WorkflowServiceHost 还公开侦听传入应用程序消息的应用程序终结点。 传入消息到达时,会将其发送到相应的工作流服务实例(如果当前已加载)。 如果需要,将创建新的工作流实例。 或者,如果现有实例已持久保存,则会从持久性存储区加载该实例。
WorkflowServiceHost 详细信息
下图显示了如何处理 WorkflowServiceHost 消息的详细信息:
此图显示了三个不同的终结点:应用程序终结点、工作流控制终结点和工作流托管终结点。 应用程序终结点接收绑定到特定工作流实例的消息。 工作流控制终结点侦听控制操作。 工作流承载终结点可侦听导致 WorkflowServiceHost 加载和执行非服务工作流的消息。 如图所示,所有消息都通过 WCF 运行时进行处理。 使用 MaxConcurrentInstances 属性实现工作流服务实例限制。 此属性将限制并发工作流服务实例的数量。 超过此限制后,对新工作流服务实例的任何其他请求或激活持久性工作流实例的请求将进行排队。 无论队列请求是针对新实例还是正在运行的持久化实例的请求,都按 FIFO 顺序进行处理。 加载主机策略信息,确定如何处理未经处理的异常,以及如何卸载和持久化空闲工作流服务。 有关这些主题的详细信息,请参阅 如何:使用 WorkflowServiceHost 配置工作流未处理的异常行为 和 如何:使用 WorkflowServiceHost 配置空闲行为。 工作流实例根据主机策略持久保存,并在需要时重新加载。 有关工作流持久性的详细信息,请参阅:如何:使用 WorkflowServiceHost 配置持久性、创建长时间运行的工作流服务和工作流持久性。
下图显示了调用 WorkflowServiceHost.Open 时的流:
工作流从 XAML 加载并创建活动树。 WorkflowServiceHost 遍历活动树并创建服务描述。 配置将应用于主机。 最后,主机开始侦听传入消息。
下图演示了当 WorkflowServiceHost 接收到针对 CanCreateInstance 设置为 true
的 Receive 活动绑定的消息时,它所执行的操作:
消息到达并由 WCF 通道堆栈处理。 检查控制器并执行相关查询。 如果消息绑定到现有实例,则会传递该消息。 如果需要创建新实例,则会检查 Receive 活动的 CanCreateInstance 属性。 如果设置为 true,则会创建一个新实例并传递消息。
下图演示了当 WorkflowServiceHost 接收到针对 CanCreateInstance 设置为 false 的 Receive 活动绑定的消息时,它所执行的操作。
消息到达并由 WCF 通道堆栈处理。 检查控制器并执行相关查询。 消息绑定到现有实例(因为 CanCreateInstance 为 false),以便从持久性存储加载实例,然后恢复书签并执行工作流。
警告
如果 SQL Server 配置为仅侦听 NamedPipe 协议,则工作流服务主机将无法打开。