Partilhar via


Transações de fluxo de trabalho

A WF fornece suporte para participar em transações de System.Transactions utilizando a atividade TransactionScope para delimitar uma unidade de trabalho transacionada. Embora System.Transactions.TransactionScope deva ser concluído explicitamente, a atividade System.Activities.Statements.TransactionScope implicitamente conclui a transação após uma conclusão bem-sucedida. Todas as atividades contidas na Body da atividade TransactionScope participam na transação. O WF pode gerir transações num fluxo de trabalho através do uso da atividade TransactedReceiveScope. Assim como a TransactionScope atividade, qualquer atividade contida na Body participa da transação. A WF garante que as atividades dependentes de Transaction.Current funcionem com ambos TransactionScope e TransactedReceiveScope. Se as atividades fornecidas pelo sistema não abordarem todos os requisitos, as atividades personalizadas poderão ser criadas usando o RuntimeTransactionHandle para habilitar cenários avançados de fluxo e controle de transações.

No exemplo a seguir, um fluxo de trabalho é construído que consiste numa Sequence atividade que contém atividades subordinadas, incluindo uma TransactionScope atividade. As Body atividades da TransactionScope são executadas sob a transação iniciada pela atividade 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" },
        }
    };
}

Para mais informações sobre como usar TransactedReceiveScope, consulte Transações em e fora dos Serviços de Fluxo de Trabalho.

Ver também