Compartir a través de


Conceptos fundamentales de Windows Workflow

El desarrollo del flujo de trabajo en .NET Framework 4.6.1 usa conceptos que pueden ser nuevos para algunos desarrolladores. En este tema se describen algunos de ellos y la forma en que se implementan.

Flujos de trabajo y actividades

Un flujo de trabajo es una colección estructurada de acciones que modela un proceso y cada acción en el flujo de trabajo se modela como una actividad. Un host interactúa con un flujo de trabajo mediante WorkflowInvoker para invocar un flujo de trabajo como si fuera un método, WorkflowApplication para el control explícito sobre la ejecución de una instancia de flujo de trabajo única y WorkflowServiceHost para las interacciones basadas en mensajes en escenarios de varias instancias. Dado que los pasos del flujo de trabajo se definen como una jerarquía de actividades, se puede decir que la actividad de nivel superior en la jerarquía define el propio flujo de trabajo. Este modelo de jerarquía ocupa el lugar de las clases SequentialWorkflow y StateMachineWorkflow explícitas de versiones anteriores. Las actividades se desarrollan como colecciones de otras actividades (con la clase Activity como base, normalmente definida con XAML) o se crean de manera personalizada mediante la clase CodeActivity (que puede usar el tiempo de ejecución para tener acceso a los datos) o usando la clase NativeActivity, que expone todo el tiempo de ejecución del flujo de trabajo a disposición del autor de la actividad. Las actividades desarrolladas con las clases CodeActivity y NativeActivity se crean con lenguajes conformes a CLR como, por ejemplo, C#.

Modelo de datos de actividad

Las actividades se almacenan y comparten datos con los tipos mostrados en la siguiente tabla.

Tipo Descripción
Variable Almacena los datos en una actividad.
Argumento Mueve los datos dentro y fuera de una de una actividad.
Expression Una actividad con un valor devuelto elevado usado en enlaces de argumento.

Tiempo de ejecución de flujo de trabajo

El tiempo de ejecución de flujo de trabajo es el entorno en el que los flujos de trabajo se ejecutan. WorkflowInvoker es la manera más sencilla de ejecutar un flujo de trabajo. El host usa WorkflowInvoker para lo siguiente:

  • Para invocar un flujo de trabajo de forma sincrónica.

  • Para proporcionar datos o recuperar las salidas de un flujo de trabajo.

  • Para agregar extensiones que van a usar las actividades.

ActivityInstance es el proxy seguro para subprocesos que los hosts pueden usar para interactuar con el tiempo de ejecución. El host usa ActivityInstance para lo siguiente:

  • Para adquirir una instancia creándola o cargándola desde un almacén de instancias.

  • Para que se le notifique sobre los eventos de ciclo de vida de la instancia.

  • Para controlar la ejecución del flujo de trabajo.

  • Para proporcionar datos o recuperar las salidas de un flujo de trabajo.

  • Para señalar una continuación del flujo de trabajo y pasar valores en el flujo de trabajo.

  • Para conservar los datos del flujo de trabajo.

  • Para agregar extensiones que van a usar las actividades.

Las actividades tienen acceso al entorno de tiempo de ejecución de flujo de trabajo mediante la clase derivada de ActivityContext adecuada, como NativeActivityContext o CodeActivityContext. Usan esto para resolver argumentos y variables, para programar las actividades secundarias, y para muchos otros objetivos.

Servicios

Los flujos de trabajo proporcionan una manera natural de implementar y tener acceso a servicios flojamente acoplados usando actividades de mensajería. Las actividades de mensajería se compilan en WCF y son el mecanismo principal que se usa para obtener datos dentro y fuera de un flujo de trabajo. Puede componer actividades de mensajería para modelar cualquier tipo de patrón de intercambio de mensajes que desee. Para más información, consulte Actividades de mensajería. Los servicios de flujo de trabajo se hospedan mediante la clase WorkflowServiceHost. Para más información, consulte Información general sobre hospedaje de servicios de flujo de trabajo. Para más información sobre los servicios de flujo de trabajo, consulte Servicios de flujo de trabajo.

Persistencia, descarga y flujos de trabajo de ejecución prolongada

El flujo de trabajo de Windows simplifica la creación de programas reactivos de ejecución prolongada al proporcionar:

  • Actividades que tienen acceso a datos externos.

  • La capacidad de crear objetos Bookmark que un agente de escucha del host puede reanudar.

  • La capacidad de conservar los datos de un flujo de trabajo y descargar el flujo de trabajo, a continuación, recargue y reactive el flujo de trabajo en respuesta a la reasunción de los objetos Bookmark en un flujo de trabajo determinado.

Un flujo de trabajo ejecuta continuamente las actividades hasta que no haya más que ejecutar o hasta que todas las actividades actualmente en ejecución estén esperando datos. En este último estado, el flujo de trabajo está inactivo. Es normal que un host descargue los flujos de trabajo inactivos y los recargue para continuar con la ejecución cuando llega un mensaje. WorkflowServiceHost proporciona la funcionalidad para esta característica y proporciona una directiva de descarga extensible. En el caso de los bloques de ejecución que usen el estado de datos volátil o datos que no se puedan conservar, una actividad puede indicar a un host que no se debería conservar mediante NoPersistHandle. Un flujo de trabajo también puede conservar explícitamente sus datos en medios de almacenamiento duraderos mediante la actividad Persist.