Administración de instancias suspendidas
El ejemplo SuspendedInstanceManagement muestra cómo administrar instancias de flujo de trabajo suspendidas. La acción predeterminada para WorkflowUnhandledExceptionBehavior es AbandonAndSuspend
. Esto significa que, de forma predeterminada, las excepciones no controladas producidas desde una instancia de flujo de trabajo hospedada en el WorkflowServiceHost harán que la instancia se elimine de la memoria (abandonada) y la versión duradera o persistente de la instancia se marque como suspendida. Una instancia de flujo de trabajo suspendida no podrá ejecutarse hasta que haya sido reactivada.
En el ejemplo se muestra cómo se puede implementar una utilidad de línea de comandos para consultar instancias suspendidas y cómo conceder al usuario la opción de reanudar o finalizar la instancia. En este ejemplo, un servicio de flujo de trabajo produce intencionadamente una excepción, lo que hace que se suspenda. La utilidad de línea de comandos se puede usar para consultar la instancia y, posteriormente, reanudar o finalizar la instancia.
Demostraciones
WorkflowServiceHost con WorkflowUnhandledExceptionBehavior y WorkflowControlEndpoint en Windows Workflow Foundation (WF).
Discusión
La utilidad de línea de comandos implementada en este ejemplo es específica de la implementación del almacén de instancias de SQL que se incluye en .NET Framework 4.6.1. Si tiene una implementación personalizada del almacén de instancias, puede adaptar esta utilidad reemplazando las implementaciones de WorkflowInstanceCommand
en el ejemplo por implementaciones específicas del almacén de instancias.
La implementación proporcionada ejecuta comandos SQL en el almacén de instancias de SQL directamente para enumerar las instancias suspendidas y se basa en un WorkflowControlEndpoint agregado al WorkflowServiceHost para reanudar o finalizar las instancias.
Para configurar, compilar y ejecutar el ejemplo
Este ejemplo requiere que se habiliten los siguientes componentes de Windows:
Servidor de colas de mensajes de Microsoft (MSMQ)
SQL Server Express
Configure la base de datos de SQL Server.
Desde una consola de Visual Studio, ejecute "setup.cmd" desde el directorio de ejemplo de SuspendedInstanceManagement, que realiza lo siguiente:
Crea una base de datos de persistencia mediante SQL Server Express. Si la base de datos de persistencia ya existe, se quita y se vuelve a crear.
Configura la base de datos para la persistencia.
Agrega IIS APPPOOL\DefaultAppPool y NT AUTHORITY\Network Service al rol InstanceStoreUsers que se definió al configurar la base de datos para la persistencia.
Configure la cola del servicio.
En Visual Studio, haga clic con el botón derecho en el proyecto SampleWorkflowApp y haga clic en Establecer como proyecto de inicio.
Compile y ejecute SampleWorkflowApp presionando F5. Esto creará la cola necesaria.
Pulsa y luego para detener SampleWorkflowApp.
Abra la consola de administración de equipos ejecutando Compmgmt.msc desde la línea de comandos.
Expanda Servicios y Aplicaciones, Message Queue Server, Colas privadas.
Haga clic con el botón derecho en la cola ReceiveTx y seleccione Propiedades.
Seleccione la pestaña Seguridad de y permita que Todos tengan permisos para recibir mensaje, ver mensajey enviar mensaje.
Ahora, ejecute el ejemplo.
En Visual Studio, ejecute de nuevo el proyecto SampleWorkflowApp sin depuración pulsando Ctrl+F5. Se imprimirán dos direcciones de punto de conexión en la ventana de la consola: una para el punto de conexión de la aplicación y otra desde el WorkflowControlEndpoint. A continuación, se crea una instancia de flujo de trabajo y se muestran registros de seguimiento para esa instancia en la ventana de la consola. La instancia de flujo de trabajo producirá una excepción que hará que la instancia se suspenda y se anule.
A continuación, se puede usar la utilidad de línea de comandos para realizar más acciones en cualquiera de estas instancias. La sintaxis de los argumentos de la línea de comandos es la siguiente:
SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]
Los comandos admitidos son:
Query
,Resume
yTerminate
. El modificador InstanceId solo es necesario para las operaciones deResume
yTerminate
.
Para limpiar (opcional)
Abra la consola de administración de equipos ejecutando Compmgmt.msc.
Expanda Servicios y Aplicaciones, Message Queue Server, Colas privadas.
Elimine la cola ReceiveTx.
Para quitar la base de datos de persistencia, ejecute cleanup.cmd.