工作流持久性
工作流持久性是指独立于进程或计算机信息持续捕获工作流实例的状态。 其目的在于:在发生系统故障时为工作流实例提供一个已知恢复点,通过卸载当前未主动执行工作的工作流实例来节省内存,或者将工作流实例状态从服务器场中的一个节点移至另一个节点。
持久性支持进程灵活性、可扩展性、故障恢复以及更有效地管理内存的功能。 持久性进程包括标识持久点、收集要保存的数据以及将数据实际存储最终委托给持久性提供程序。
若要对工作流启用持久性,需要将实例存储与 WorkflowApplication 或 WorkflowServiceHost 相关联,如如何:对工作流和工作流服务启用持久性中所述。 WorkflowApplication 和 WorkflowServiceHost 使用与其关联的实例存储将工作流实例保存到持久性存储中,并根据持久性存储中存储的工作流实例数据将工作流实例加载到内存中。
.NET Framework 4.6.1 附带的 SqlWorkflowInstanceStore 类允许将有关工作流实例的数据和元数据持久保存到 SQL Server 2005 或 SQL Server 2008 数据库中。 有关详细信息,请参阅 SQL 工作流实例存储。
若要存储和加载应用程序特定数据以及与工作流实例相关的信息,您可以创建用于扩展 PersistenceParticipant 类的持久性参与者。 持久性参与者参与持久性进程的目的是:将可序列化的自定义数据保存到持久性存储中,将实例存储中的数据加载到内存中,以及在持久性事务下执行任何其他逻辑。 有关详细信息,请参阅持久性参与者。
Windows Server App Fabric 大大简化了配置持久性的过程。 有关详细信息,请参阅 Windows Server App Fabric 的持久性概念
隐式持久点
以下列表包含当实例存储与工作流关联时持久化工作流所依据的条件的示例。
当 TransactionScope 活动完成时或 TransactedReceiveScope 活动完成时。
当工作流实例变为空闲状态,且对工作流主机设置了 WorkflowIdleBehavior 时。 例如,当使用消息传递活动或 Delay 活动时会发生此情况。
当 WorkflowApplication 变为空闲状态且将应用程序的 PersistableIdle 属性设置为 PersistableIdleAction.Persist 时。
当指示主机应用程序保存或卸载工作流实例时。
当中止工作流实例或工作流实例结束时。
当执行 Persist 活动时。
当使用 Windows Workflow Foundation 的早期版本开发的工作流实例在可互操作执行过程中遇到持久点时。