工作流事务

WF 支持通过使用 TransactionScope 活动确定事务处理工作单元的范围来参与 System.Transactions 事务。 尽管必须显式完成 System.Transactions.TransactionScope,但 System.Activities.Statements.TransactionScope 活动在成功完成后将对事务隐式调用完成。 Body 活动的 TransactionScope 中包含的所有活动都会参与该事务。 通过使用 TransactedReceiveScope 活动,WF 可以使事务流入某个工作流中。 与 TransactionScope 活动一样,Body 中包含的所有活动都会参与该事务。 WF 确保依赖于 Transaction.Current 的活动使用 TransactionScopeTransactedReceiveScope。 如果系统提供的活动无法满足所有需求,可以使用 RuntimeTransactionHandle 生成自定义活动,以便支持高级流控制和事务控制方案。

在下面的示例中,构建了一个工作流,该工作流由 Sequence 活动构成,该活动包含包括 TransactionScope 活动的子活动。 BodyTransactionScope 活动在 TransactionScope 活动初始化的事务下执行。

static Activity ScenarioOne()
{
    return new Sequence
    {
        Activities =
        {
            new WriteLine { Text = "    Begin workflow" },

            new TransactionScope
            {
                Body = new Sequence
                {
                    Activities =
                    {
                        new WriteLine { Text = "    Begin TransactionScope" },

                        new PrintTransactionId(),

                        new TransactionScopeTest(),

                        new WriteLine { Text = "    End TransactionScope" },
                    },
                },
            },

            new WriteLine { Text = "    End workflow" },
        }
    };
}

有关更多信息,请了解如何使用 TransactedReceiveScope,并参阅使事务流入和流出工作流服务

另请参阅