Creación de los servicios personalizados WorkflowCommitWorkBatchService
El tiempo de ejecución del flujo de trabajo utiliza un servicio WorkflowCommitWorkBatchService cada vez que necesita confirmar los resultados de una ejecución del flujo de trabajo. Puede proporcionar un servicio WorkflowCommitWorkBatchService personalizado para controlar cómo se ejecuta la lógica de la confirmación, por ejemplo, proporcionando un contexto transaccional. Si no se especifica WorkflowCommitWorkBatchService, el tiempo de ejecución del flujo de trabajo crea DefaultWorkflowCommitWorkBatchService cuando se inicia el tiempo de ejecución.
Para crear un servicio WorkflowCommitWorkBatchService personalizado, debe derivar de la clase base WorkflowCommitWorkBatchService. Esta clase define un método virtual, que puede invalidar:
protected void CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback)
El flujo de trabajo llama a este método en tiempo de ejecución cuando tiene un lote de trabajo para confirmar, por ejemplo, al conservar los cambios en una instancia de flujo de trabajo. La implementación de este método debería invocar el método CommitWorkBatchCallback dentro de un ámbito transaccional adecuado.
Transacciones ambiente
La implementación base comprueba si existe una transacción ambiente que fue originada por la instancia de flujo de trabajo. Si no encuentra una transacción ambiente, crea una y llama el delegado CommitWorkBatch. Sin embargo, si existe una transacción ambiente, la implementación base crea una DependentTransaction que especifica BlockCommitUntilComplete de la enumeración DependentCloneOption y, a continuación, establece la transacción ambiente igual a la DependentTransaction recientemente creada. Hace esto para que no se pueda completar la transacción ambiente generada por la instancia de flujo de trabajo hasta que se complete la confirmación de trabajo del lote de trabajo. Si se produce una excepción, el servicio CommitWorkBatch repite la transacción y reinicia la excepción. Puede utilizar FaultHandlerActivity para detectar esta excepción. Esto le permite reintentar la transacción cuando sea necesario.
El único tipo de transacción ambiente admitida por WorkflowCommitWorkBatchService es una transacción que se origina en la instancia de flujo de trabajo. Las transacciones ambiente que se originan en la aplicación host o en la aplicación que ejecuta el tiempo de ejecución del flujo de trabajo se eliminan temporalmente del subproceso actual para reducir sus efectos secundarios. Después de que el flujo de trabajo esté inactivo, la transacción ambiente original que fue contenida por el host se vuelve a colocar en el subproceso. Por consiguiente, Windows Workflow Foundation no admite la capacidad de introducir transacciones desde el exterior en una instancia de flujo de trabajo.
Consulte también
Referencia
DefaultWorkflowCommitWorkBatchService
WorkflowCommitWorkBatchService
Conceptos
Servicios CommitWorkBatch de Windows Workflow
Otros recursos
Desarrollo de servicios de Windows Workflow Foundation
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.