Ejemplo de uso del servicio WorkflowCommitWorkBatch

Download sample

En este ejemplo se muestra cómo Windows Workflow Foundation permite que los servicios personalizados participen en la misma transacción de la instancia de flujo de trabajo en que se utilizan los servicios.

Toda actividad compuesta que tenga comportamiento transaccional asociado también tiene un lote de trabajo asociado. Si alguna de las actividades que contiene esta actividad compuesta llama a un método en un servicio proporcionado por el host, ese servicio también puede formar parte del lote de trabajo. Cuando se completa la actividad compuesta, se confirma el lote de trabajo. Si, por alguna razón, no se confirma alguno de los elementos, se deshace todo el lote de trabajo. Como parte del proceso de confirmación, el contexto de la transacción se proporciona a todos los elementos del lote. Por consiguiente, el servicio que desea participar en la transacción también obtiene el contexto de la transacción. A continuación, puede pasar ese contexto de la transacción a cualquier llamada que realice. Por ejemplo, lo más frecuente es pasar el contexto de la transacción a una llamada a la base de datos para que incluso las llamadas a la base de datos puedan formar parte de la misma transacción.

Participar en el lote de trabajo

Para participar en el lote de trabajo, el servicio debe implementar una interfaz llamada IPendingWork.

Registrarse en el lote de trabajo

Para participar en el lote de trabajo, el servicio (o cualquier tipo que tenga que participar en el lote de trabajo) se debe registrar en el lote de trabajo. En el ejemplo siguiente se explican los pasos necesarios para registrarse en el lote de trabajo.

Durante la ejecución, una actividad llama a un método en el servicio. En lugar de hacer el trabajo real del método, el método se registra en el lote de trabajo y el contexto necesario para finalizar el trabajo. Después, cuando el lote de trabajo se va a confirmar, se llama al método Commit con el contexto que se usó en el momento del registro. Dicho de otro modo, el método tan sólo retrasa el procesamiento hasta que sea adecuado hacer el trabajo en sí.

Para registrarse en el lote de trabajo, el elemento de trabajo se agrega al lote de trabajo actual como se indica a continuación:

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

Detalles de ejemplo

En el ejemplo se debe transferir una cantidad de dinero. Se va a transferir una cantidad de dinero de una cuenta de ahorro a una cuenta corriente. En primer lugar, el flujo de trabajo abona el importe en la cuenta corriente. A continuación, trata de cargar el importe en la cuenta de ahorro. Si el dinero disponible en la cuenta de ahorro es menor que la cantidad que se va a transferir, la transacción se anula y se restaura la cuenta corriente a su estado original. Si el dinero disponible es suficiente, la transacción se realiza con éxito.

Como parte del método de confirmación, el contexto de la transacción se pasa a las llamadas a la base de datos para que incluso la base de datos participe en la misma transacción.

El ejemplo cuenta con tres actividades personalizadas.

CreditAmount: se usa para abonar el importe en la cuenta corriente.

DebitAmount: se usa para cargar el importe en la cuenta de ahorros.

TransactionComposite: actividad compuesta que hereda de la actividad SequenceActivity. Proporciona el comportamiento de la transacción.

Para crear y configurar la base de datos de SQL Server

  1. Utilice Microsoft SQL Server 2005 Express, SQL Server 2000 o versiones posteriores, o SQL Server 2000 Desktop Engine (MSDE), para crear una base de datos nueva denominada SqlPersistenceService mediante la instrucción de consulta de SQL

    CREATE DATABASE SqlPersistenceService

    Nota   Cuando se utilizan SqlTrackingService y SqlWorkflowPersistenceService en una aplicación de flujo de trabajo, es recomendable utilizar una única base de datos tanto para persistencia como para seguimiento.

  2. En el área de trabajo del Analizador de consultas SQL, seleccione la base de datos que creó en el paso 1, en la lista de bases de datos disponibles.

  3. En el menú Archivo, haga clic en Abrir y abra el script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistenceService_Schema.sql, donde <framework_version> es la versión actual de .NET Framework instalada en el equipo.

  4. Ejecute la consulta haciendo clic en Ejecutar o presionando F5 para crear las tablas del servicio de persistencia de SQL.

  5. En el menú Archivo, haga clic en Abrir y abra el script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistenceService_Logic.sql, donde <framework_version> es la versión actual de .NET Framework instalada en el equipo.

  6. Ejecute la consulta haciendo clic en Ejecutar o presionando F5 para crear los procedimientos almacenados del servicio de persistencia de SQL.

Para generar y ejecutar este ejemplo

  1. Para descargar el ejemplo, haga clic en Descargar ejemplo.

    Extrae el proyecto de ejemplo en su disco duro local.

  2. Cree la base de datos TransactionServiceSampleDB ejecutando el script para la base de datos proporcionado en el archivo .\SQL\TransactionServiceDB.cmd.

    Nota

    Este script crea la base de datos denominada TransactionServiceSampleDB. La cadena de conexión del ejemplo utiliza este nombre de la base de datos.

    Nota

    Asegurarse de que actualiza la cadena de conexión correcta en el código fuente si cambia el nombre de la base de datos. De no hacerlo así, el ejemplo no se puede conectar a la base de datos. También, antes de ejecutar el script, compruebe que se especifica la ubicación correcta de la instalación del servidor de SQL en la línea 20 del script.

  3. Haga clic en Inicio, señale Programas, señale Microsoft Windows SDK y, a continuación, haga clic en CMD Shell.

  4. Vaya al directorio de origen del ejemplo.

  5. En el símbolo del sistema, escriba MSBUILD <nombre del archivo de solución>.

  6. En el símbolo del sistema del SDK, ejecute el archivo .exe de la carpeta Host\bin\debug (o la carpeta Host\bin para la versión de VB del ejemplo), que se encuentra bajo la carpeta de origen del ejemplo.

  7. Para depurar el ejemplo, haga que el proyecto SampleWorkflow sea el proyecto de inicio haciendo clic con el botón secundario en él en el Explorador de soluciones y seleccionando Establecer como proyecto de inicio.

  8. Abra el cuadro de diálogo Propiedades del proyecto SampleWorkflow.

  9. Seleccione Programa externo de inicio y seleccione el archivo host.exe de la carpeta Host\bin\Debug.

    Al ejecutar el archivo Host.exe, se debe escribir el importe que se va a transferir de la cuenta de ahorro a la cuenta corriente. Escriba una cantidad positiva que no sea cero. La transacción se realiza correctamente o no dependiendo del saldo de la cuenta de ahorro. Verá el resultado correspondiente en la pantalla.

Consulte también

Referencia

Commit
Add
WorkflowCommitWorkBatchService

Otros recursos

Windows Workflow CommitWorkBatch Services
Using Transactions in Workflows

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.