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