Compartir a través de


Transacciones de flujo de trabajo

WF proporciona el soporte técnico para participar en las transacciones System.Transactions mediante la actividad TransactionScope para abarcar una unidad de trabajo en la que se haya realizado una transacción. Aunque la clase System.Transactions.TransactionScope debe completarse explícitamente, la actividad System.Activities.Statements.TransactionScope realiza una llamada implícita de finalización de la transacción cuando se haya completado correctamente. Las actividades que se contengan en el elemento de la propiedad Body de la actividad TransactionScope participan en la transacción. WF puede fluir las transacciones en un flujo de trabajo a través del uso de la actividad TransactedReceiveScope. Al igual que ocurre con la actividad TransactionScope, cualquier actividad contenida en la propiedad Body participa en la transacción. WF garantiza que las actividades dependientes de Transaction.Current funcionan con TransactionScope y TransactedReceiveScope. Si las actividades proporcionadas por el sistema no afrontan todos los requisitos, las actividades personalizadas se pueden compilar usando RuntimeTransactionHandle para habilitar los escenarios de flujo avanzado y del control de transacciones.

En el ejemplo siguiente, se construye un flujo de trabajo que consta de una actividad Sequence que contiene actividades secundarias, incluida una actividad TransactionScope. Las actividades Body de TransactionScope se ejecutan bajo la transacción inicializada por la actividad 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 más información, consulte sobre el uso de TransactedReceiveScope y consulte Flujo de las transacciones en los servicios de flujo de trabajo.

Consulte también