创建自定义持久性服务
实现某持久性服务可以将工作流实例的运行时状态保存到持久性存储区并从该存储区检索该状态。 在工作流执行期间的某些特定提交点,Windows Workflow Foundation 运行时引擎会通知该持久性服务保留工作流的状态信息。 例如,在以下情况下会出现这种情况:工作流空闲,TransactionScopeActivity 活动执行完毕,或者主机应用程序调用 Unload 方法。
Windows Workflow Foundation 运行时引擎不会自行保留状态信息。 此功能由在运行时添加到引擎的自定义持久性服务提供。 运行时引擎负责启动持久性操作,而自定义持久性服务负责保存和加载保持状态日期。
警告
如果您创建的工作流使用 TransactionScopeActivity 活动、CompensatableTransactionScopeActivity 活动、CompensatableSequenceActivity 活动或自定义活动(这些自定义活动使用 PersistOnCloseAttribute 属性或实现 ICompensatableActivity 接口),则您必须指定要使用的持久性服务,否则执行该工作流时会引发异常。
创建自定义持久性服务
您可以通过从 WorkflowPersistenceService 抽象基类派生来创建自定义持久性服务。 该基类包含您在创建持久性服务时必须覆盖的五种抽象方法。 下表中列出了这些方法。
方法 | 说明 |
---|---|
将指定的已完成范围重新加载到内存中。 |
|
将工作流实例的指定状态重新加载到内存中。 |
|
将指定的已完成范围保存到数据存储区。 |
|
将工作流实例状态保存到数据存储区。 |
|
解除对指定工作流实例状态的锁定。 |
|
确定在指定的工作流实例空闲一段时间后是否将它保留到存储区中。 |
有关演示 Windows Workflow Foundation 引擎如何通过利用自定义持久性服务保存工作流实例状态来卸载工作流的示例,请参见Custom Persistence Service。
锁定工作流状态信息
Windows Workflow Foundation 运行时引擎可以锁定工作流状态信息,以防运行于多个进程中的不同持久性服务加载一个工作流。 但是,实际锁定机制由自定义持久性服务自行实现。 这表示,当您创建持久性服务时,是否支持锁定机制是可选的。 如果您选择支持锁定工作流状态,且当调用 SaveWorkflowInstanceState 和调用 LoadWorkflowInstanceState 时解除锁定参数设置为 false,则应该锁定对工作流状态的访问。 除非在后续调用 SaveWorkflowInstanceState 时将解除锁定参数设置为 true,或者调用 UnlockWorkflowInstanceState 方法,否则,工作流状态信息将保持锁定状态。 如果某进程尝试加载的工作流实例状态处于锁定状态,则将引发 WorkflowOwnershipException。
使用事务保留工作流状态信息
如果您的自定义持久性服务使用持久性存储区,则您应该使用工作流事务批处理将工作流状态信息的写入一直延迟到到达工作流提交点。 为此,可在自定义持久性服务类中实现 IPendingWork 接口,并将表示持久性存储区挂起更改的工作项添加到 WorkBatch 属性。
请参见
参考
概念
其他资源
Custom Persistence Service
Using Persistence Services
开发 Windows Workflow Foundation 服务
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。