Workflow Transactions
WF provides support for participating in System.Transactions transactions by using the TransactionScope activity to scope a transacted unit of work. While the System.Transactions.TransactionScope must be explicitly completed the System.Activities.Statements.TransactionScope activity implicitly calls complete on the transaction upon successful completion. Any activities that are contained in the Body of the TransactionScope activity participate in the transaction. WF can to flow transactions into a workflow through the use of the TransactedReceiveScope activity. Like the TransactionScope activity, any activity contained in the Body participates in the transaction. WF ensures that activities dependent on Transaction.Current works with both TransactionScope and TransactedReceiveScope. If the system-provided activities do not address all requirements, custom activities can be built using the RuntimeTransactionHandle to enable advanced flow and transaction control scenarios.
In the following example, a workflow is constructed consisting of a Sequence activity that contains child activities including a TransactionScope activity. The Body activities of the TransactionScope execute under the transaction initialized by the TransactionScope activity.
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" },
}
};
}
For more information, see about using TransactedReceiveScope, see Flowing Transactions into and out of Workflow Services.