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:
Cuándo se completan las transacciones atómicas en actividades TransactionScopeActivity y las actividades CompensatableTransactionScopeActivity.
Cuándo una instancia de flujo de trabajo se vuelve inactiva y el marcador UnloadOnIdle está establecido en verdadero para WorkflowPersistenceService. Por ejemplo, esto se produce al usar una actividad DelayActivity.
Cuándo la aplicación host de tiempo de ejecución llama a System.Workflow.Runtime.WorkflowInstance.Unload o System.Workflow.Runtime.WorkflowInstance.TryUnload en la instancia de flujo de trabajo.
Cuándo se finaliza o termina una instancia de flujo de trabajo.
Cuándo se completa una actividad personalizada mediante el atributo PersistOnCloseAttribute
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
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.