ワークフロー トランザクション

WF は、TransactionScope アクティビティを使用してトランザクション済み作業単位のスコープを設定することで、System.Transactions トランザクションへの参加をサポートします。 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 の使用に関する詳細については、ワークフロー サービスに入り、ワークフロー サービスから出るトランザクションの流れに関するページを参照してください。

関連項目