实例激活

SQL 工作流实例存储运行一个内部任务,该任务定期唤醒并检测持久性数据库中的可运行或可激活的工作流实例。 如果找到可运行的工作流实例,它会通知能够激活该实例的工作流主机。 如果实例存储找到可激活的工作流实例,它会通知激活工作流主机的通用主机,该主机又会运行工作流实例。 本主题中的以下部分详细介绍了实例激活过程。

检测和激活可运行工作流实例

如果实例未处于挂起状态或已完成状态,并且满足以下条件,则 SQL 工作流实例存储会认为工作流实例 可运行

  • 实例处于解除锁定状态,并且具有已过期的挂起计时器。

  • 实例上的锁已过期。

  • 实例已解锁,其状态为 “正在执行”。

当 SQL 工作流实例存储找到可运行的实例时,将引发 HasRunnableWorkflowEvent。 此后,SqlWorkflowInstanceStore 将停止监视,直到在该存储上调用一次 TryLoadRunnableWorkflowCommand

已订阅 HasRunnableWorkflowEvent 并且能够加载实例的工作流主机,会对实例存储执行 TryLoadRunnableWorkflowCommand 操作,以将实例加载到内存中。 如果主机和实例的元数据属性 WorkflowServiceType 设置为相同的值,则认为工作流主机能够加载工作流实例。

检测和激活可激活工作流实例

如果实例可运行,并且没有能够加载该实例的工作流主机在计算机上运行,则工作流实例被视为 可激活 。 有关可运行工作流实例的定义,请参阅上面的检测和激活可运行工作流实例。

当 SQL 工作流实例存储在数据库中找到可激活的工作流实例时,将引发 HasActivatableWorkflowEvent。 此后,SqlWorkflowInstanceStore 将停止监视,直到在该存储上调用一次 QueryActivatableWorkflowsCommand

当已订阅 HasActivatableWorkflowEvent 的泛型主机接收到此事件时,它将针对实例存储执行 QueryActivatableWorkflowsCommand 以获取创建工作流主机所需的激活参数。 泛型主机使用这些激活参数创建工作流主机,后者又加载并运行可运行的服务实例。

泛型主机

泛型主机是一个主机,其泛型主机的元数据属性 WorkflowServiceType 的值设置为 WorkflowServiceType。Any 指示它可以处理任何工作流类型。 泛型主机具有名为 ActivationType 的 XName 参数。

目前,SQL 工作流实例存储支持将 ActivationType 参数的值设置为 WAS 的通用主机。 如果未将 ActivationType 设置为 WAS,则 SQL 工作流实例存储将引发一个 InstancePersistenceException。 Windows Server AppFabric 的托管功能包含的工作流管理服务为通用主机,其激活类型设置为 WAS

对于 WAS 激活,泛型主机需要一组激活参数来派生可激活新主机的终结点地址。 WAS 激活的激活参数是站点的名称、相对于站点的应用程序的路径以及服务相对于应用程序的路径。 SQL 工作流实例存储区在SaveWorkflowCommand执行期间存储这些激活参数。

可运行实例的检测周期

SQL 工作流实例存储的 “可运行实例检测周期 ”属性指定一个时间段,之后 SQL 工作流实例存储会运行检测任务,以检测上一检测周期之后持久性数据库中的任何可运行或可激活的工作流实例。 有关此属性的更多详细信息,请参阅 “可运行实例检测周期 ”。