Esta documentación está archivada y no tiene mantenimiento.

Detalles de las características de Windows Workflow Foundation

Este tema es aplicable a Windows Workflow Foundation 4.

.NET Framework versión 4 agrega una serie de características a Windows Workflow Foundation. Este documento describe algunas de las nuevas características y proporciona detalles sobre los escenarios en que pueden ser útiles.

Actividades de mensajería

Las actividades de mensajería (Receive, SendReply, Send y ReceiveReply) se utilizan para enviar y recibir mensajes de WCF desde el flujo de trabajo. Las actividades SendReply y Receive se utilizan para formar una operación de servicio de Windows Communication Foundation (WCF) que se expone a través de WSDL como servicios Web de WCF estándar. Send y ReceiveReply sirven para utilizar un servicio Web similar a un elemento ChannelFactory de WCF; también existe una experiencia de Agregar referencia de servicio para Workflow Foundation que genera actividades preconfiguradas.

Introducción a las actividades de mensajería

  • En Visual Studio 2010, cree un proyecto de aplicación de servicio de flujo de trabajo WCF. Se colocará un par Receive y SendReply en el lienzo.

  • Haga clic con el botón secundario en el proyecto y seleccione Agregar referencia de servicio. Señale un WSDL de servicio Web existente y haga clic en Aceptar. Compile el proyecto para que se muestren las actividades generadas (se implementan utilizando Send y ReceiveReply) en el cuadro de herramientas.

  • Los ejemplos para estas actividades se pueden encontrar en las siguientes secciones:

  • Documentación conceptual

  • Documentación del diseñador de actividades de mensajería

Escenario de ejemplo de actividades de mensajería

Un servicio BestPriceFinder llama a varios servicios de líneas aéreas para encontrar el mejor precio de billete para una ruta determinada. La implementación de este escenario requeriría utilizar las actividades de mensaje para recibir la solicitud de precios, recuperar los precios de los servicios back-end y responder a la solicitud de precios con el mejor precio. También requeriría utilizar otras actividades para uso inmediato con el fin de crear la lógica de negocios para calcular el mejor precio.

WorkflowServiceHost

WorkflowServiceHost es el host de flujo de trabajo para uso inmediato que admite varias instancias, configuración y mensajería de WCF (aunque no se requiere que los flujos de trabajo utilicen mensajería para ser hospedados). También se integra con persistencia, seguimiento y control de instancias a través de un conjunto de comportamientos de servicio. Al igual que ServiceHost de WCF, WorkflowServiceHost se puede autohospedar en una aplicación de consola/WinForms/WPF o un servicio de Windows, u hospedarse en web (como un archivo .xamlx) en IIS o WAS.

Introducción a host de servicio de flujo de trabajo

Escenario de WorkflowServiceHost

Un servicio BestPriceFinder llama a varios servicios de líneas aéreas para encontrar el mejor precio de billete para una ruta determinada. La implementación de este escenario requeriría hospedar el flujo de trabajo en WorkflowServiceHost. También se utilizarían las actividades de mensaje para recibir la solicitud de precios, recuperar los precios de los servicios back-end y responder a la solicitud de precios con el mejor precio. 

Correlación

Una correlación es una de estas dos cosas:

  • Una forma de agrupar mensajes; es decir, la relación entre un mensaje de solicitud y su respuesta.

  • Una forma de asignar un fragmento de datos a una instancia de servicio.

Introducción

  • Para iniciarse en la correlación, cree un nuevo proyecto en Visual Studio. Cree una variable de tipo CorrelationHandle.

  • Un ejemplo de correlación utilizado para agrupar mensajes es una correlación solicitud-respuesta que agrupa los mensajes.

    • En una actividad Receive, haga clic en la propiedad CorrelationInitializers y agregue un elemento RequestReplyCorrelationInitializer utilizando la variable de tipo CorrelationHandle creada anteriormente en el primer paso.

    • Cree una actividad SendReply haciendo clic con el botón secundario en Receive y haciendo clic en "Crear SendReply". Péguela en su flujo de trabajo después de la actividad Receive.

  • Un ejemplo de asignación de un fragmento de datos a una instancia de servicio es la correlación basada en contenido que asigna un fragmento de datos (por ejemplo, un identificador de pedido) a una instancia de flujo de trabajo en particular.

    • En cualquier actividad de mensajería, haga clic en la propiedad CorrelationInitializers y agregue un elemento QueryCorrelationInitializer utilizando la variable CorrelationHandle creada anteriormente. Haga doble clic en la propiedad deseada en el mensaje (por ejemplo, OrderID) del menú desplegable. Establezca la propiedad CorrelatesWith en la variable CorrelationHandle utilizada anteriormente.

  • Ejemplos:

Escenario de correlación

Se utiliza un flujo de trabajo del procesamiento de pedidos para administrar la creación de nuevos pedidos y la actualización de pedidos existentes. La implementación de este escenario requeriría hospedar el flujo de trabajo en WorkflowServiceHost y utilizar las actividades de mensajería. También requeriría correlación basada en orderId para asegurarse de que las actualizaciones se realizan en el flujo de trabajo correcto. 

Configuración simplificada

El esquema de configuración de WCF es complejo y proporciona a los usuarios muchas dificultades para encontrar características. En .NET Framework 4, nos hemos centrado en ayudar a los usuarios de WCF a configurar sus servicios con las siguientes características:

  • Eliminar la necesidad de configuración por servicio explícita. Si no configura elementos <service> para su servicio y este no define extremos mediante programación, se agregará automáticamente al servicio un conjunto de extremos, uno por cada dirección base del servicio y por cada contrato implementado por el servicio.

  • Permite al usuario definir valores predeterminados para los comportamientos y enlaces de WCF, que se aplicarán a los servicios sin ninguna configuración explícita.

  • Los extremos estándar definen extremos preconfigurados reutilizables, que tienen valores fijos para una o varias propiedades de extremo (dirección, enlace y contrato), y permiten la definición de propiedades personalizadas.

  • Finalmente, ConfigurationChannelFactory permite realizar la administración central de la configuración del cliente de WCF, que es útil en escenarios en que la configuración se selecciona o se cambia después del tiempo de carga del dominio de aplicación.

Introducción

Escenarios de configuración simplificados

  • Un desarrollador de ASMX experimentado desea empezar a utilizar WCF. Sin embargo, WCF parece demasiado complicado. ¿Cuál es la información necesaria para escribir un archivo de configuración? En .NET 4, se puede decidir incluso no tener un archivo de configuración en absoluto.

  • Un conjunto existente de servicios de WCF es muy difícil de configurar y mantener. El archivo de configuración tiene miles de líneas de código XML cuya modificación es sumamente peligrosa. Se necesita ayuda para reducir esa cantidad de código a algo más fácil de tratar.

Resolución del contrato de datos

En .NET 3.5, había unas cuantas limitaciones en el diseño de tipos conocidos:

  • No era posible agregar tipos conocidos dinámicamente durante la serialización o la deserialización.

  • Los serializadores no podían tratar información de xsi:type desconocida.

  • No era posible que los usuarios especificasen qué xsi:type preferirían que apareciese en la conexión para, por ejemplo, reducir el tamaño de una instancia de serialización en la conexión.

DataContractResolver resuelve estos problemas en .NET 4.

Introducción

Escenarios de resolución del contrato de datos

  • Evitar tener que declarar decenas de objetos KnownTypeAttribute en un servicio.

  • Reducir el tamaño del blob XML.

Diagrama de flujo

El diagrama de flujo es un paradigma conocido para representar visualmente los problemas de dominio. Es un nuevo estilo de flujo de control que se está introduciendo en .NET 4. Una característica básica de diagrama de flujo es que solo se ejecuta una actividad en un momento dado. Los diagramas de flujo pueden expresar bucles y resultados alternativos, pero no pueden expresar de forma nativa la ejecución simultánea de varios nodos.

Introducción

Escenarios de diagrama de flujo

Una actividad de diagrama de flujo se puede utilizar para implementar un juego de adivinanzas. Este juego es muy simple: el equipo selecciona un número aleatorio y el jugador tiene que adivinar el número. Cuando el jugador envía cada respuesta, el equipo le muestra una sugerencia (por ejemplo, "intente un número más pequeño"). Si el jugador encuentra el número en menos de 7 intentos, recibe una felicitación especial por parte del equipo. Este juego se puede implementar con una combinación de las siguientes actividades de procedimiento:

Actividades de procedimiento (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Las actividades de procedimiento proporcionan un mecanismo para modelar el flujo de control secuencial utilizando conceptos familiares para los programadores. Estas actividades habilitan tradicionalmente construcciones de lenguaje de programación estructurada y, cuando corresponde, proporcionan paridad de lenguaje con lenguajes comunes de procedimiento como C# o VB.

Introducción

Escenarios de actividad de procedimiento

  • ParallelParallel: un sistema de administración de documentos de intranet tiene un flujo de trabajo de aprobación de documentos. Los documentos necesitan ser aprobados por personas en varios departamentos antes de poderse publicar en la intranet. No hay un orden establecido para las aprobaciones; se pueden producir en cualquier momento mientras el documento esté en la fase de "pendiente de aprobación". Cuando un usuario envía un documento para su revisión, debe ser aprobado por su superior directo, el administrador de la intranet, y el administrador de comunicaciones internas.

  • ParallelForEach: una aplicación de WF administra las compras corporativas dentro de una gran compañía. Las reglas corporativas establecen que, antes de planear cualquier operación de compra, se requieren las valoraciones de tres proveedores diferentes. Un empleado del departamento de compras selecciona tres proveedores de la lista de proveedores de la compañía. Una vez seleccionados e informados estos proveedores, la compañía esperará a que realicen sus propuestas económicas. Las propuestas pueden llegar en cualquier orden. Para implementar este escenario en WF, se utiliza un elemento ParallelForEach que recorrerá en iteración la colección de proveedores y pedirá sus propuestas económicas. Una vez reunidas todas las ofertas, se selecciona y se muestra la mejor.

InvokeMethod

La actividad InvokeMethod permite invocar métodos públicos en objetos o tipos dentro del ámbito. Admite la invocación de métodos estáticos y de instancia con o sin parámetros (incluidas matrices de parámetros) y de métodos genéricos. También permite la ejecución de métodos sincrónica y asincrónicamente.

Introducción

  • En Visual Studio 2010, cree una aplicación de consola de flujo de trabajo. Agregue una actividad InvokeMethod en el diseñador de flujo de trabajo y configure en él métodos estáticos y de instancia.

  • Ejemplos:

  • Documentación del diseñador: InvokeMethod Activity Designer

Escenarios de InvokeMethod

  • Se necesita invocar un método en un objeto dentro del ámbito. Por ejemplo, se necesita agregar un valor a un diccionario. Se invoca el método Add de la instancia del diccionario y se proporcionan la clave y el valor.

  • Se necesita invocar un método en un objeto CLR heredado. En lugar de crear una actividad personalizada para encapsular la llamada a esa clase heredada, si permanece dentro del ámbito durante la ejecución del flujo de trabajo, se puede utilizar InvokeMethod.

Actividades de control de errores

La actividad TryCatch proporciona un mecanismo para detectar excepciones que se producen durante la ejecución de un conjunto de actividades contenidas (similar a la construcción de Prueba/Captura en C#/VB). TryCatch proporciona control de excepciones en el nivel de flujo de trabajo. Cuando se produce una excepción no controlada, se anula el flujo de trabajo y no se ejecutará el bloque Finally. Este comportamiento es coherente con C#.

Introducción

Escenarios de control de errores

Necesita ejecutarse un conjunto de actividades y es necesaria la ejecución de una lógica específica cuando se produce un error. Si durante esa lógica de control de errores se encuentra que el error no es recuperable, volverá a producirse la excepción y la actividad primaria (o el host) abordará el problema.

Actividad Pick

La actividad Pick proporciona un modelado de flujo de control basado en eventos en WF. Pick contiene muchas bifurcaciones donde cada bifurcación espera que se produzca un evento determinado antes de ejecutarse. En esta configuración, el comportamiento de Pick es similar al de Switch, ya que la actividad solo ejecutará un evento del conjunto de eventos de los que está realizando escuchas. Cada bifurcación está orientada a eventos y el evento que se produzca ejecutará primero la bifurcación correspondiente. El resto de bifurcaciones se cancelan y se dejan de realizar escuchas de eventos.

Introducción

  • En Visual Studio 2010, cree una aplicación de consola de flujo de trabajo. Agregue una actividad Pick en el diseñador de flujo de trabajo.

  • Ejemplo: Uso de la actividad Pick

  • Documentación del diseñador: Pick Activity Designer

Escenario de Pick

Se necesita solicitar una entrada a un usuario. En circunstancias normales, el desarrollador utilizaría una llamada a un método como ReadLine para solicitar la entrada de un usuario. El problema con esta configuración es que el programa espera hasta que el usuario especifica algo. En este escenario, se necesita un tiempo de espera para desbloquear una actividad de bloqueo. Un escenario común es el que requiere que una tarea se complete dentro de un período de tiempo determinado. El agotamiento del tiempo de espera de una actividad de bloqueo es un escenario en el que Pick agrega gran cantidad de valor.

Servicio de enrutamiento de WCF

El servicio de enrutamiento está diseñado para ser un enrutador por software genérico que permite controlar cómo los mensajes de WCF circulan entre los clientes y los servicios. El servicio de enrutamiento permite desacoplar los clientes de los servicios, proporcionando mucha más libertad en lo respecta a las configuraciones que se pueden admitir y la flexibilidad que se tiene al considerar cómo se han de hospedar los servicios. En .NET 3.5, los clientes y los servicios se acoplaban estrechamente; un cliente tenía que estar al corriente de todos los servicios con los que necesitaba hablar y saber dónde estaban ubicados. Además, WCF en .NET Framework 3.5 tenía las siguientes limitaciones:

  • El control de errores era complejo, ya que esta lógica tenía que codificarse de forma rígida en el cliente.

  • Los clientes y los servicios tenían que utilizar siempre los mismos enlaces.

  • Los servicios raramente se factorizaban correctamente: es más fácil que el cliente hable con un servicio que implementa todo en lugar de tener que elegir entre varios servicios.

El servicio del enrutamiento en .NET 4 está diseñado para facilitar la solución de estos problemas. El nuevo servicio de enrutamiento tiene las siguientes características:

  1. Enrutamiento basado en contenido (los objetos MessageFilter examinan un mensaje para determinar dónde se debe enviar).

  2. Protocolo de puente (transporte y mensaje)

  3. Control de errores (el enrutador detecta excepciones de comunicación y no puede establecer comunicación con los extremos de reserva)

  4. Actualización dinámica (en memoria) de MessageFilterTable y configuración de enrutamiento.

Introducción

  1. Documentación: Routing

  2. Ejemplos: Routing Services

  3. Blog: Reglas de enrutamiento

Escenarios de enrutamiento

El servicio de enrutamiento es útil en los siguientes escenarios:

  • Los clientes pueden hablar con varios servicios sin tener que dirigirse a todos ellos directamente.

  • Los clientes pueden realizar lógica adicional en la solicitud de un cliente para determinar dónde hay que enrutarlo.

  • Descomponer las operaciones que un cliente realiza en varias implementaciones de servicio sin refactorizar el cliente.

  • Los clientes y los servicios pueden hablar con enlaces diferentes que tienen configuraciones de seguridad diferentes.

  • Puede habilitarse a los clientes para que sean más sólidos ante errores o la no disponibilidad de servicios.

Detección de WCF

La detección de WCF es una tecnología de .NET Framework que permite incorporar un mecanismo de detección a la infraestructura de las aplicaciones. Puede utilizarla para hacer su servicio reconocible y configurar los clientes para buscar los servicios. Los clientes ya no necesitan estar codificados de forma rígida con el extremo, lo que hace que la aplicación sea más sólida y tolerante a los errores. La detección es la plataforma perfecta para integrar capacidades de autoconfiguración en la aplicación.

El producto se basa en la norma WS-Discovery. Está diseñado para ser interoperable, extensible y genérico. El producto admite dos modos de operación:

  1. Administrado: donde hay una entidad en la red con gran conocimiento de los servicios existentes; los clientes la consultan directamente para obtener información. Esto es análogo a Active Directory.

  2. Ad hoc: donde los clientes utilizan los mensajes de multidifusión para buscar los servicios.

Además, los mensajes de detección son válidos para distintos protocolos de red; pueden utilizarse sobre cualquier protocolo que admita los requisitos de modo. Por ejemplo, los mensajes de multidifusión de detección se pueden enviar a través del canal UDP o cualquier otra red que admita la mensajería de multidifusión. Estos puntos de diseño, combinados con la flexibilidad de características, permiten adaptar la detección de forma específica a la solución.

Introducción

Escenarios de detección

Un desarrollador no desea codificar de forma rígida los extremos, porque no se sabe cuándo estará disponible un servicio determinado. En su lugar, desea elegir un servicio en tiempo de ejecución. Se necesita más desacoplamiento, solidez y autoconfiguración entre los componentes de la aplicación.

Seguimiento

El seguimiento de flujo de trabajo proporciona una visión sobre la ejecución de una instancia de flujo de trabajo. Los eventos de seguimiento se emiten desde un flujo de trabajo en el nivel de instancia de flujo de trabajo y cuando se ejecutan las actividades dentro del flujo de trabajo. Se necesita agregar un participante de seguimiento de flujo de trabajo al host de flujo de trabajo para suscribirse a los registros de seguimiento. Los registros de seguimiento se filtran utilizando un perfil de seguimiento. .NET Framework proporciona un participante de seguimiento ETW (Seguimiento de eventos para Windows) y se instala un perfil básico en el archivo machine.config.

Introducción

  1. En Visual Studio 2010, cree un proyecto de aplicación de servicio de flujo de trabajo WCF. Se colocará un par Receive y SendReply en el lienzo para empezar.

  2. Abra web.config y agregue un comportamiento de seguimiento de ETW sin ningún perfil.

    1. Se utiliza el perfil predeterminado.

    2. Abra el visor de eventos y habilite el canal analítico en el nodo siguiente: Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Servidor de aplicaciones-Aplicaciones. Haga clic con el botón secundario en Analítico y seleccione Habilitar registro.

    3. Ejecute el servicio de flujo de trabajo.

    4. Observe los eventos de seguimiento de flujo de trabajo en el visor de eventos.

  3. Ejemplos: Seguimiento

  4. Documentación conceptual: Seguimiento y traza del flujo de trabajo

Almacén de instancias de flujo de trabajo de SQL

SqlWorkflowInstanceStore es una implementación basada en SQL Server de un almacén de instancias. Un almacén de instancias almacena el estado de una instancia en ejecución junto con todos los datos necesarios para cargar y reanudar esa instancia. El host de servicio indica al almacén de instancias que guarde el estado de la instancia si el flujo de trabajo persiste y le indica también que cargue el estado de la instancia cuando llegue un mensaje para esa instancia o expire una actividad Delay.

Introducción

  1. En Visual Studio 2010, cree un flujo de trabajo que contenga una actividad Persist implícita o explícita. Agregue el comportamiento de SqlWorkflowInstanceStore al host de servicio de flujo de trabajo. Esto se puede realizar en el código o en el archivo de configuración de la aplicación.

  2. Ejemplos: Persistencia

  3. Documentación conceptual: Almacén de instancias de flujo de trabajo de SQL

Mostrar: