事务回滚

本主题适用于 Windows Workflow Foundation 4。

此示例演示如何创建一个自定义 NativeActivity,用于访问环境 RuntimeTransactionHandle 以获取环境事务并显式回滚它。

示例详细信息

在工作流中,当最外面的 TransactionScopeTransactedReceiveScope 完成时,将会自动完成一个事务。当未经处理的异常跨过范围边界传播时,将会隐式回滚一个事务。但是,您有时可能有必要显式回滚一个事务,而不必引发异常。在这种情况下,您可以使用此示例中的类似的自定义回滚活动,显式中止环境事务并提供一个可选的异常原因。

RollbackActivity 是一个 NativeActivity, 因为它需要访问执行属性以获取环境 RuntimeTransactionHandle。在 Execute 方法中,它包含 RuntimeTransactionHandle 并检查它是否为 null,null 表示没有通过环境运行时事务来使用该活动。然后,它获取该事务,并再次检查是否存在 null。即使没有初始化运行时事务,也可能会有一个环境 RuntimeTransactionHandle。最后,它通过调用 Rollback 并指定用户提供的异常或表明活动已回滚事务的一般异常,中止事务。

演示工作流包含一个 TransactionScope,它的主体在 RollbackActivity 执行前后输出事务状态。请注意,即使已回滚事务,TransactionScope 也会完成执行操作,并且在主体完成之前不会中止工作流。工作流中止的原因是 AbortInstanceOnTransactionFailure 属性默认设置为 true

使用此示例

  1. 在 Visual Studio 2010 中加载 TransactionRollback.sln 解决方案。

  2. 按 F6 生成解决方案。

  3. 按 Ctrl+F5 运行应用程序。

Ee656553.Important(zh-cn,VS.100).gif 注意:
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:

<安装驱动器>:\WF_WCF_Samples

如果此目录不存在,请转到 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:

<安装驱动器>:\WF_WCF_Samples\WF\Scenario\Transactions\TransactionRollback

另请参见

概念

工作流事务