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 la actividad TransactionScope, cualquier actividad contenida en el Body participa en la transacción. WF garantiza que las actividades que dependen de Transaction.Current funcionen con TransactionScope y TransactedReceiveScope. Si las actividades proporcionadas por el sistema no satisfacen todos los requisitos, se pueden crear actividades personalizadas utilizando RuntimeTransactionHandle para habilitar escenarios avanzados de flujo y 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