创建自定义的 WorkflowCommitWorkBatchService 服务

只要工作流运行时需要提交工作流的执行结果,它就会使用 WorkflowCommitWorkBatchService 服务。 您可以提供自定义的 WorkflowCommitWorkBatchService 服务来控制如何执行提交逻辑,例如,通过提供事务上下文进行控制。 如果未指定 WorkflowCommitWorkBatchService,则工作流运行时会在启动时创建一个 DefaultWorkflowCommitWorkBatchService

若要创建自定义的 WorkflowCommitWorkBatchService 服务,必须从 WorkflowCommitWorkBatchService 基类派生。 该类定义一个虚拟方法,而您可以覆盖此方法:

protected void CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback)

当工作流运行时具有要提交的成批工作时(例如,当保留对工作流实例的更改时),它会调用此方法。 实现此方法时应该在适当的事务范围内调用 CommitWorkBatchCallback 方法。

环境事务

基本实现检查是否存在由工作流实例发起的环境事务。 如果它找不到环境事务,则会创建一个 CommitWorkBatch 委托并调用该委托。 但是,如果确实存在环境事务,则基本实现会根据 DependentCloneOption 枚举创建一个指定 BlockCommitUntilCompleteDependentTransaction,然后将该环境事务设置为等于新创建的 DependentTransaction。 它之所以这样做,是为了使工作流实例生成的环境事务在工作批次提交工作完成后再完成。 如果发生异常,则 CommitWorkBatch 服务会回滚该事务并再次引发该异常。 您可以使用 FaultHandlerActivity 来捕获该异常。 这样,您便可以根据需要重试该事务。

WorkflowCommitWorkBatchService 唯一支持的环境事务类型是源自工作流实例的事务。 对于源自主机应用程序或源自执行工作流运行时的应用程序的环境事务,会暂时将其从当前线程中移除以减少它们产生的副作用。 在工作流空闲后,主机包含的原始环境事务会重新返回到线程中。 因此,Windows Workflow Foundation 不支持将事务从外部放入工作流实例这一功能。

请参见

参考

DefaultWorkflowCommitWorkBatchService
WorkflowCommitWorkBatchService

概念

Windows 工作流 CommitWorkBatch 服务

其他资源

开发 Windows Workflow Foundation 服务

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。