Compartir a través de


Servicios de persistencia de Windows Workflow

Muchos procesos de negocio tardan mucho tiempo en finalizarse (pueden durar varios meses o incluso años). Guardar el flujo de trabajo en memoria no es sólo poco práctico (debido a las limitaciones de memoria), si no que también se impide que aumente de tamaño, porque una instancia se debe procesar en un único servidor. Muchos de estos flujos de trabajo de ejecución prolongada no ejecutan activamente lógica de flujos o de procesos y están, de hecho, inactivos, esperando información por parte de los usuarios u otros sistemas. Si se descarga una instancia inactiva, la aplicación host puede ganar memoria y posibilitar la escalabilidad en los servidores de procesamiento.

Cuando se dan ciertas condiciones mientras se ejecuta un flujo de trabajo, el motor de tiempo de ejecución de flujo de trabajo usa un servicio de persistencia, si hay alguno cargado en el tiempo de ejecución, para conservar información de estado acerca de la instancia de flujo de trabajo. Estas condiciones incluyen, entre otras cosas, lo siguiente:

Si se cumple una de estas condiciones y se agrega un servicio de persistencia al motor de tiempo de ejecución, el motor de tiempo de ejecución llama a los métodos proporcionados por el servicio de persistencia para guardar información de estado acerca de la instancia de flujo de trabajo. Igualmente, cuando el motor de tiempo de ejecución de flujo de trabajo tiene que restaurar una instancia de flujo de trabajo previamente conservada, llama a métodos proporcionados por el servicio de persistencia para cargar esta información de estado. En otras palabras, el motor de tiempo de ejecución de flujo de trabajo determina cuándo ha de producirse la persistencia, pero es tarea de un servicio de persistencia el llevar a cabo las operaciones de persistencia necesarias.

Otra parte del estado del flujo de trabajo administrado por SqlWorkflowPersistenceService es la información del temporizador. Cada vez que configura una actividad DelayActivity en su definición de flujo de trabajo y usa un servicio de persistencia como SqlWorkflowPersistenceService, la información de duración asociada con la actividad se conserva como parte del estado del flujo de trabajo. Cada vez que el tiempo de ejecución del flujo de trabajo evalúa la instancia de flujo de trabajo, se procesan los eventos de temporizador pendientes.

Creación de servicios de persistencia

Puede crear un servicio de persistencia derivando una clase de la clase WorkflowPersistenceService. Puede agregar su servicio de persistencia al motor de tiempo de ejecución de flujo de trabajo llamando a AddService o realizando una entrada adecuada en el archivo de configuración de la aplicación. Windows Workflow Foundation proporciona la clase SqlWorkflowPersistenceService, un servicio de persistencia original que puede utilizar como es o ampliarlo. Para obtener más información acerca de cómo crear un servicio de persistencia personalizado, consulte Creación de servicios de persistencia personalizados. Para obtener más información sobre el uso de la clase SqlWorkflowPersistenceService, consulte Utilizar SqlWorkflowPersistenceService.

Nota

.WorkflowRuntime debe contener sólo un servicio de persistencia.

Bloqueo de información de estado de flujo de trabajo

El motor de tiempo de ejecución de flujo de trabajo tiene una semántica para bloquear información de estado del flujo de trabajo para el uso en entornos en los que los servicios de persistencia que se ejecutan en diferentes procesos podrían tener acceso a un almacén de datos único. La clase WorkflowPersistenceService le permite admitir esta funcionalidad del motor de tiempo de ejecución de flujo de trabajo proporcionando un parámetro a SaveWorkflowInstanceState que especifica si la información de estado de una instancia de flujo de trabajo se debe desbloquear en el almacén de datos, y proporcionando un método UnlockWorkflowInstanceState para desbloquear información de estado del flujo de trabajo previamente bloqueada. En un servicio de persistencia que implementa el bloqueo, una llamada a LoadWorkflowInstanceState debe bloquear la información de estado para una instancia de flujo de trabajo.

Cuando cree su propio servicio de persistencia, inicie PersistenceException si el servicio no guarda la información de estado en su almacén de datos o si carga información de estado desde su almacén de datos. El motor de tiempo de ejecución de flujo de trabajo espera este comportamiento.

Comportamiento por lotes del servicio de persistencia

Se proporciona un mecanismo por lotes a los servicios que utilizan un almacén duradero para guardar información de estado de flujo de trabajo. Es importante en estos casos mantener la coherencia entre el almacén duradero que usa el servicio de persistencia y el estado interno del motor de tiempo de ejecución de flujo de trabajo. Puede agregar funcionalidad definida por la interfaz IPendingWork a su servicio y, a continuación, participar en procesamiento por lotes de la transacción de flujo de trabajo proporcionado por el servicio WorkflowCommitWorkBatchService agregando los cambios a su almacén de datos como elementos de trabajo a WorkBatch. Para obtener más información, consulte SaveCompletedContextActivity o SaveWorkflowInstanceState.

Escenarios de hospedaje complejos

Un posible escenario de implementación de soluciones de Windows Workflow Foundation es crear varias aplicaciones host, cada una con un conjunto diferente de servicios que se ejecutan en configuraciones de escritorio y de servidor diferentes. En tal tipo de escenario, un requisito puede ser que algunos flujos de trabajo definidos en la solución sólo puedan ejecutarse en ciertos sistemas. Los servicios originales en Windows Workflow Foundation, como el servicio SqlWorkflowPersistenceService, no admiten este tipo de configuración. Para controlar qué instancias de flujo de trabajo se cargan en qué sistemas, debe crear un servicio de persistencia personalizado. Para obtener más información, consulte Creación de servicios de persistencia personalizados.

Consulte también

Referencia

SqlWorkflowPersistenceService
SqlPersistenceWorkflowInstanceDescription
WorkflowPersistenceService
WorkBatch

Conceptos

Utilizar SqlWorkflowPersistenceService
Creación de servicios de persistencia personalizados

Otros recursos

Servicios de Windows Workflow Foundation
Ejercicio 4: Uso de los servicios de tiempo de ejecución
Using Persistence Services

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.