Información interna de extensiones del host de servicio de flujo de trabajo
La clase WorkflowServiceHost proporciona un host para los servicios de flujo de trabajo. Es responsable de escuchar los mensajes entrantes y enrutarlos a la instancia del servicio de flujo de trabajo adecuada, controlar la descarga y persistencia de los flujos de trabajo inactivos, etc. En este tema se describe cómo procesa la clase WorkflowServiceHost los mensajes entrantes.
Información general de WorkflowServiceHost
La clase WorkflowServiceHost se usa para hospedar los servicios de flujo de trabajo. Escucha los mensajes entrantes y los enruta a la instancia de servicio adecuada. De esta forma, se crean nuevas instancias o se cargan instancias existentes desde un almacenamiento duradero según convenga. En el siguiente diagrama se muestra el funcionamiento de la clase WorkflowServiceHost en un nivel alto:
Este diagrama muestra que la clase WorkflowServiceHost carga definiciones de servicio de flujo de trabajo desde archivos .xamlx e información de configuración a partir de un archivo de configuración. También carga la configuración de seguimiento del perfil de seguimiento. WorkflowServiceHost expone un extremo de control de flujo de trabajo que le permite enviar operaciones de control a instancias de flujo de trabajo. Para más información, consulte el ejemplo de Extremo de control de flujo de trabajo.
La clase WorkflowServiceHost también expone los extremos de la aplicación que escuchan los mensajes de aplicación entrantes. Cuando un mensaje entrante llega, se envía a la instancia de servicio de flujo de trabajo adecuada, si está cargada actualmente. Si es necesario se crea una nueva instancia de flujo de trabajo. O bien, si se ha conservado una instancia existente, se carga desde el almacén de persistencia.
Detalles de WorkflowServiceHost
En el siguiente diagrama se muestra cómo controla la clase WorkflowServiceHost los mensajes de forma un poco más detallada:
Este diagrama muestra tres extremos distintos: un extremo de la aplicación, un extremo de control de flujo de trabajo y un extremo de hospedaje de flujo de trabajo. El punto de conexión de aplicación recibe los mensajes que se enlazan para una instancia de flujo de trabajo específica. El punto de conexión de control de instancia de flujo de trabajo escucha las operaciones de control. El extremo de hospedaje de flujo de control escucha mensajes que pueden provocar que la clase WorkflowServiceHost cargue y ejecute flujos de trabajo no pertenecientes al servicio. Como se muestra en el diagrama, se procesan todos los mensajes a través del tiempo de ejecución de WCF. La limitación de instancia de servicio de flujo de trabajo se logra mediante el uso de la propiedad MaxConcurrentInstances. Esta propiedad limitará el número de instancias de servicio de flujo de trabajo simultáneas. Se pondrán en cola las solicitudes adicionales de nuevas instancias de servicio de flujo de trabajo o las solicitudes para activar instancias de flujo de trabajo persistentes cuando se supere este límite. Las solicitudes puestas en cola se procesan en el orden FIFO independientemente de si son para una nueva instancia o para un instancia persistente en ejecución. Se carga la información de directivas de host y se determina cómo se tratan las excepciones no controladas, cómo se descargan los servicios de flujo de trabajo inactivos y cómo se conservan. Para más información sobre estos temas, consulte Procedimiento para configurar el comportamiento de excepción no controlada del flujo de trabajo con WorkflowServiceHost y Procedimiento para configurar el comportamiento inactivo con WorkflowServiceHost. Las instancias de flujo de trabajo se conservan de acuerdo con las directivas de host y se recargan según convenga. Para más información sobre la persistencia del flujo de trabajo, consulte Procedimiento para configurar la persistencia con WorkflowServiceHost, Creación de un servicio de flujo de trabajo de duración prolongada y Persistencia del flujo de trabajo.
En la ilustración siguiente se muestra el flujo cuando se llama a WorkflowServiceHost.Open:
Se carga el flujo de trabajo desde XAML y se crea el árbol de actividad. WorkflowServiceHost recorre el árbol de actividad y crea la descripción del servicio. La configuración se aplica al host. Finalmente, el host empieza a escuchar los mensajes entrantes.
En la siguiente ilustración se muestra lo que hace la clase WorkflowServiceHost cuando recibe un mensaje enlazado para una actividad Receive con el valor de CanCreateInstance establecido en true
:
El mensaje llega y lo procesa la pila del canal WCF. Se comprueban los límites y se ejecutan las consultas de correlación. Si el mensaje se enlaza para una instancia existente, el mensaje se entrega. Si se debe crear una nueva instancia, se comprueba la propiedad CanCreateInstance de la actividad Receive. Si su valor se establece en true, se crea una nueva instancia y se entrega el mensaje.
En la siguiente ilustración se muestra lo que hace la clase WorkflowServiceHost cuando recibe un mensaje enlazado para una actividad Receive con el valor de CanCreateInstance establecido en false.
El mensaje llega y lo procesa la pila del canal WCF. Se comprueban los límites y se ejecutan las consultas de correlación. El mensaje se enlaza para una instancia existente, puesto que el valor de CanCreateInstance es false, con el fin de que la instancia se cargue desde el almacén de persistencia, se reanude el marcador y se ejecute el flujo de trabajo.
Advertencia
Se producirá un error de apertura en el host de servicio de flujo de trabajo si se configura SQL Server para escuchar solo en el protocolo NamedPipe.
Consulte también
- Servicios de flujo de trabajo
- Hospedar servicios de flujo de trabajo
- Extremo de control de flujo de trabajo
- Procedimiento para configurar el comportamiento de excepción no controlada del flujo de trabajo con WorkflowServiceHost
- Crear un servicio de flujo de trabajo de larga ejecución
- Persistencia del flujo de trabajo