工作流事务

WF 支持通过使用 System.Transactions 活动确定事务处理工作单元的范围来参与 TransactionScope 事务。 尽管必须显式完成 System.Transactions.TransactionScope,但 System.Activities.Statements.TransactionScope 活动在成功完成后将对事务隐式调用完成。 Body 活动的 TransactionScope 中包含的所有活动都会参与该事务。 WF 可以通过使用 TransactedReceiveScope 活动将事务流入工作流。 与 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,请参阅 将事务流入和流出工作流服务

另请参阅