本主题适用于 Windows Workflow Foundation 4。
本主题说明如何对工作流和工作流服务启用持久性。
对工作流启用持久性
使用 WorkflowApplication 类的 InstanceStore 属性,可以将实例存储与 WorkflowApplication 相关联。Persist 方法将工作流保存或持久保存到与应用程序关联的实例存储中。Unload 方法将工作流保存到实例存储中,然后从内存中卸载该实例。Load 方法使用实例持久性存储中存储的工作流数据将工作流加载到内存中。
Persist 方法执行下列步骤:
暂停工作流计划程序并等待,直至工作流进入空闲状态。
将工作流持久保存或保存到持久性存储。
恢复工作流计划程序。
Unload 方法执行下列步骤:
暂停工作流计划程序并等待,直至工作流进入空闲状态。
将工作流持久保存或保存到持久性存储。
在内存中释放工作流实例。
当工作流位于非持久性区域中时,将阻止 Persist 和 Unload 方法,直到工作流退出非持久性区域为止。在完成非持久性区域之后,该方法将继续执行保存或卸载操作。如果在完成非持久性区域之前发生超时,或者如果持久性进程的时间太长,则将引发 TimeoutException。
对工作流服务启用持久性
WorkflowServiceHost 类的 DurableInstancingOptions 成员具有一个名为 InstanceStore 的属性,可用于关联实例存储和 WorkflowServiceHost。
// wsh is an instance of WorkflowServiceHost class
wsh.DurableInstancingOptions.InstanceStore = new SqlWorkflowInstanceStore();
打开 WorkflowServiceHost 后,如果 DurableInstancingOptions.InstanceStore 不为空,则会自动启用持久性。
通常,服务行为通过使用 InstanceStore 属性来提供用于工作流服务主机的具体实例存储。例如,SqlWorkflowInstanceStoreBehavior 创建一个 SqlWorkflowInstanceStore 实例,并对其进行配置,然后将其赋给 DurableInstancingOptions.InstanceStore。