Información de estado de procesamiento por lotes en flujos de trabajo
Su flujo de trabajo guarda periódicamente su estado en un almacenamiento persistente durante determinados puntos de control llamados puntos de persistencia. Si algo va mal en su flujo de trabajo, podría ser necesario que el motor de tiempo de ejecución recupere la información conservada para volver a un estado estable. Si dos o más componentes se están comunicando, es a menudo útil coordinar la persistencia para que los estados de los componentes sean coherentes. Los lotes de trabajo los usan los servicios externos al flujo de trabajo para conservar información de estado. Estos servicios procesan por lotes sus elementos de trabajo y comparten la misma transacción que la del flujo de trabajo. Si el flujo de trabajo no está llevando a cabo una transacción, algunos elementos de trabajo aún pueden ser procesados por lotes por los servicios durante los puntos de persistencia.
Windows Workflow Foundation proporciona IWorkBatch y IPendingWork para ayudar a los servicios y las instancias de flujo de trabajo a conservar información de estado.
En todas las llamadas a los servicios iniciadas por el flujo de trabajo, el motor de tiempo de ejecución proporciona IWorkBatch en su contexto de llamada de subproceso. Su servicio puede agregar un elemento de trabajo pendiente a este lote de trabajo para que el motor de tiempo de ejecución pueda procesar todos los elementos de trabajo relacionados en una transacción única. Para agregar un elemento de trabajo al lote o para registrar con el lote, use la siguiente instrucción:
WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);
Además, puede pasar IPendingWork al constructor para ExternalDataEventArgs.
Secuencia de acciones cuando se invoca un componente
Durante la inicialización, el flujo de trabajo crea un lote de trabajo.
El flujo de trabajo adjunta el lote de trabajo a la invocación de un método en un componente. Los servicios pueden tener acceso al lote de trabajo en cualquiera de sus métodos mediante la clase WorkflowEnvironment.
Secuencia de acciones en punto de confirmación
El flujo de trabajo crea una transacción.
El flujo de trabajo ejecuta una iteración en el lote de trabajo y recoge todos los elementos de trabajo para un componente, manteniendo el orden, para crear un lote de trabajo. El flujo de trabajo invoca el método Commit en el componente, pasando la transacción y el lote de trabajo.
El componente agrega el trabajo en el lote de trabajo a la transacción.
Los pasos 2 y 3 se repiten para todos los componentes con elementos de trabajo en lotes de trabajo.
Cuando las notificaciones Commit tienen éxito, el flujo de trabajo confirma la transacción correspondiente.
Al confirmar correctamente una transacción, el flujo de trabajo realiza una iteración del lote de trabajo y recoge todos los elementos de trabajo por componente, como en el paso 2. El flujo de trabajo invoca el método Complete para cada componente, pasando la transacción correspondiente y lote de trabajo.
Secuencia de acciones en un error de flujo de trabajo
El flujo de trabajo identifica todos los elementos de trabajo relacionados con el ámbito de error y construye un lote de trabajo.
El flujo de trabajo invoca el método Complete de cada IPendingWork único con un estado completo establecido en falso para todo el trabajo en el lote de trabajo.
El flujo de trabajo abandona todo el trabajo en el lote de trabajo si ese lote de trabajo pertenece a un contexto secundario de una actividad TransactionScopeActivity o CompensatingTransactionScopeActivity.
El tiempo de ejecución mantiene la referencia a todos los elementos de lote de trabajo restantes después de la recuperación del error. Ese trabajo se puede entonces confirmar en un punto de persistencia futuro.
Reintento de transacciones de lote de trabajo
DefaultWorkflowCommitWorkBatchService, SharedConnectionWorkflowCommitWorkBatchService, SqlWorkflowPersistenceServicey SqlTrackingService tienen la capacidad de reintentar las confirmaciones de lote de trabajo. Esta funcionalidad, habilitada mediante la propiedad EnableRetries, permite a estos servicios seguir intentando confirmar un lote de trabajo en el caso de tiempos de espera de la red, reinicio del equipo, reinicializaciones de proceso de SQL Server, etcétera.
El número de intentos se establece en 20. Los primeros tres intentos se producen uno detrás del otro. Después hay un retraso entre cada intento subsiguiente. Las aplicaciones pueden ajustar el tiempo de espera de conexión en su cadena de conexión para ajustar parcialmente el tiempo entre los intentos.
Se puede establecer esta propiedad mediante programación o a través de un archivo de configuración. Para obtener más información acerca de cómo establecerlo mediante programación, consulte la propiedad EnableRetries en cada uno de los servicios. Para obtener más información acerca de cómo establecerlo mediante un archivo de configuración, consulte Workflow Configuration Files.
Consulte también
Conceptos
Flujo de trabajo y comunicación de la aplicación
Otros recursos
Using Transaction Services Sample
Desarrollo de flujos de trabajo
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.