Administración de instancias suspendidas

En el ejemplo de SuspendedInstanceManagement se muestra cómo administrar instancias de flujo de trabajo que se han suspendido. La acción predeterminada para WorkflowUnhandledExceptionBehavior es AbandonAndSuspend. Esto significa que, de forma predeterminada, las excepciones no controladas producidas por una instancia de flujo de trabajo hospedada en WorkflowServiceHost causarán que la instancia se elimine de la memoria (se abandone) y la versión duradera/conservada de la instancia se marque como suspendida. Una instancia de flujo de trabajo suspendida no se podrá ejecutar hasta que no se anule la suspensión.

El ejemplo muestra cómo se puede implementar una utilidad de línea de comandos para consultar las instancias suspendidas y cómo otorgarle al usuario la opción de reanudar o finalizar la instancia. En este ejemplo, un servicio de flujo de trabajo produce una excepción de forma intencionada, haciendo que se suspenda. La utilidad de línea de comandos se puede utilizar a continuación para consultar la instancia y reanudarla o finalizarla.

Muestra

WorkflowServiceHost con WorkflowUnhandledExceptionBehavior y WorkflowControlEndpoint en Windows Workflow Foundation (WF).

Debate

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, podrá adaptar esta utilidad reemplazando las implementaciones de WorkflowInstanceCommand en el ejemplo con implementaciones que sean específicas de su almacén de instancias.

La implementación proporcionada ejecuta directamente comandos SQL en el almacén de instancias de SQL para enumerar las instancias suspendidas y se basa en un objeto WorkflowControlEndpoint agregado al host WorkflowServiceHost para reanudar o finalizar las instancias.

Configurar, compilar y ejecutar el ejemplo

  1. En este ejemplo se requiere que los siguientes componentes de Windows estén habilitados:

    1. Microsoft Message Queuing (MSMQ)

    2. SQL Server Express

  2. Configure la base de datos de SQL Server.

    1. En un símbolo del sistema de Visual Studio, ejecute "setup.cmd" desde el directorio de muestra SuspendedInstanceManagement, el cual:

      1. 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.

      2. Configura la base de datos para la persistencia.

      3. Agrega IIS APPPOOL\DefaultAppPool y NT AUTHORITY\Network Service al rol InstanceStoreUsers que se definió al configurar la base de datos para la persistencia.

  3. Configure la cola del servicio.

    1. En Visual Studio, haga clic con el botón derecho en el proyecto SampleWorkflowApp y, a continuación, haga clic en Establecer como proyecto de inicio.

    2. Presione F5 para compilar y ejecutar SampleWorkflowApp. Esto creará la cola necesaria.

    3. Presione Entrar para detener SampleWorkflowApp.

    4. Abra la consola Administración del equipo ejecutando Compmgmt.msc desde un símbolo del sistema.

    5. Expanda Servicios y Aplicaciones, Message Queue Server, Colas privadas.

    6. Haga clic con el botón derecho en la cola ReceiveTx y seleccione Propiedades.

    7. Seleccione la pestaña Seguridad y otorgue al grupo Todos los siguientes permisos: Recibir mensaje, Inspeccionar mensaje y Enviar Mensaje.

  4. Ejecute el ejemplo.

    1. En Visual Studio, vuelva a ejecutar el proyecto SampleWorkflowApp sin depurar presionando Ctrl+F5. En la ventana de la consola se imprimirán dos direcciones de extremo: una para el extremo de la aplicación y otra procedente de WorkflowControlEndpoint. A continuación, se crea una instancia de flujo de trabajo y en la ventana de la consola aparecerán los registros de seguimiento de esa instancia. La instancia de flujo de trabajo producirá una excepción que hará que la instancia se suspenda y se anule.

    2. La utilidad de línea de comandos se puede utilizar a continuación para realizar más acciones en cualquiera de estas instancias. La sintaxis para 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 y Terminate. El modificador InstanceId solo es necesario para las operaciones Resume y Terminate.

Para realizar la limpieza (Opcional)

  1. Abra la consola Administración del equipo ejecutando Compmgmt.msc.

  2. Expanda Servicios y Aplicaciones, Message Queue Server, Colas privadas.

  3. Elimine la cola ReceiveTx.

  4. Para quitar la base de datos de persistencia, ejecute cleanup.cmd.