Transactions de workflow
WF offre une prise en charge pour participer aux transactions System.Transactions en utilisant l’activité TransactionScope pour étendre une unité traitée de travail. Alors que le System.Transactions.TransactionScope doit être terminé explicitement, l'activité System.Activities.Statements.TransactionScope appelle implicitement la transaction une fois cette dernière terminée. Toute activité contenue dans l’élément Body de l’activité TransactionScope participe à la transaction. WF peut transférer des transactions dans un workflow en faisant appel à l’activité TransactedReceiveScope. Comme l'activité TransactionScope, toute activité contenue dans le Body participe à la transaction. WF vérifie que les activités dépendant de Transaction.Current utilisent à la fois TransactionScope et TransactedReceiveScope. Si les activités fournies par le système ne remplissent pas toutes les conditions, les activités personnalisées peuvent être construites à l’aide du RuntimeTransactionHandle afin d’activer un flux avancé et des scénarios de contrôle de transaction.
Dans l’exemple suivant, un workflow est composé d’une activité Sequence qui contient des activités enfants, y compris une activité TransactionScope. Les activités Body du TransactionScope s'exécutent sous la transaction initialisée par l'activité 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" },
}
};
}
Pour plus d’informations sur l’utilisation de TransactedReceiveScope, consultez Flux des transactions dans et hors des services de workflow.