本主题适用于 Windows Workflow Foundation 4。
持久性参与者可以参与应用程序宿主触发的持久性操作(保存或加载)。.NET Framework 版本 4附带两个抽象类:PersistenceParticipant 和 PersistenceIOParticipant,您可以使用它们来创建持久性参与者。持久性参与者派生自这些类之一,它实现所需的方法,然后将该类的实例添加到 WorkflowServiceHost 上的 WorkflowExtensions 集合。应用程序宿主可在持久保存工作流实例时查找此类工作流扩展,并在适当时对持久性参与者调用适当的方法。
下面的列表介绍持久性子系统在持久保存(保存)操作的不同阶段执行的任务。持久性参与者用在第三和第四个阶段。如果参与者是 IO 参与者(还参与 IO 操作的持久性参与者),则该参与者还将在第六个阶段中使用。
收集内置值,包括工作流状态、书签、映射变量和时间戳。
收集已添加到与工作流实例关联的扩展集合中的所有持久性参与者。
调用由所有持久性参与者实现的 CollectValues 方法。
调用由所有持久性参与者实现的 MapValues 方法。
将工作流持久保存或保存到持久性存储区。
对所有持久性 IO 参与者调用 BeginOnSave 方法。如果参与者不是 IO 参与者,则跳过此任务。如果持久性段是事务性的,则在 Transaction.Current 属性中提供事务。
等待所有持久性参与者完成。如果所有参与者在持久保存实例数据时都成功,则提交事务。
持久性参与者派生自 PersistenceParticipant 类,可以实现 CollectValues 和 MapValues 方法。持久性 IO 参与者派生自 PersistenceIOParticipant 类,除了实现 CollectValues 和 MapValues 方法外,还可以实现 BeginOnSave 方法。
一个阶段完成之后才开始下一个阶段。例如,从第一个阶段中的所有持久性参与者收集值。然后,将在第一个阶段中收集的所有值提供给第二个阶段中的所有持久性参与者进行映射。接下来,将在第一个阶段中收集的和在第二个阶段中映射的所有值提供给第三个阶段中的持久性提供程序,依此类推。
下面的列表介绍持久性子系统在加载操作的不同阶段执行的任务。持久性参与者用在第四个阶段中。持久性 IO 参与者(还参与 IO 操作的持久性参与者)还在第三个阶段中使用。
收集已添加到与工作流实例关联的扩展集合中的所有持久性参与者。
从持久性存储区加载工作流。
对所有持久性 IO 参与者调用 BeginOnLoad,并等待所有持久性参与者完成。如果持久性段是事务性的,则在 Transaction.Current 中提供事务。
基于从持久性存储区检索的数据将工作流实例加载到内存中。
对每个持久性参与者调用 PublishValues。
持久性参与者派生自 PersistenceParticipant 类,可以实现 PublishValues 方法。持久性 IO 参与者派生自 PersistenceIOParticipant 类,除了实现 PublishValues 方法外,还可以实现 BeginOnLoad 方法。