WF では、TransactionScope アクティビティを使用してトランザクション単位のスコープを指定することで、System.Transactions トランザクションへの参加をサポートします。 System.Transactions.TransactionScopeを明示的に完了する必要がある間、System.Activities.Statements.TransactionScope アクティビティは正常に完了するとトランザクションの完了を暗黙的に呼び出します。 TransactionScope アクティビティのBodyに含まれるすべてのアクティビティは、トランザクションに参加します。 WF では、 TransactedReceiveScope アクティビティを使用してトランザクションをワークフローにフローできます。 TransactionScope アクティビティと同様に、Bodyに含まれるすべてのアクティビティがトランザクションに参加します。 WF は、 Transaction.Current に依存するアクティビティが TransactionScope と TransactedReceiveScopeの両方で動作することを保証します。 システム提供のアクティビティがすべての要件に対応していない場合は、 RuntimeTransactionHandle を使用してカスタム アクティビティを構築し、高度なフローとトランザクション制御のシナリオを有効にすることができます。
次の例では、TransactionScope アクティビティを含む子アクティビティを含むSequence アクティビティで構成されるワークフローが構築されています。 TransactionScopeのBody アクティビティは、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の使用」を参照してください。 ワークフロー サービスとの間のトランザクションのフローを参照してください。
こちらも参照ください
.NET