Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
.NET Framework 4 agrega varias características a Windows Workflow Foundation. En este documento se describe una serie de las nuevas características y se proporcionan detalles sobre los escenarios en los que pueden resultar útiles.
Actividades de mensajería
Las actividades de mensajería (Receive, SendReply, Send, ReceiveReply) se usan para enviar y recibir mensajes WCF del flujo de trabajo. Las actividades Receive y SendReply se usan para formar una operación de servicio de Windows Communication Foundation (WCF) que se expone a través de WSDL igual que los servicios web WCF estándar. Send y ReceiveReply se usan para consumir un servicio web similar a un WCF ChannelFactory; también existe una experiencia agregar referencia de servicio para Workflow Foundation que genera actividades preconfiguradas.
Introducción a las actividades de mensajería
En Visual Studio 2012, cree un proyecto de aplicación de servicio de flujo de trabajo de WCF. Se colocará un par Receive y SendReply en el lienzo.
Haga clic con el botón derecho en el proyecto y seleccione Agregar referencia de servicio. Seleccione un WSDL de servicio web existente y haga clic en Aceptar. Compile el proyecto para mostrar las actividades generadas (implementadas mediante Send y ReceiveReply) en el cuadro de herramientas.
Escenario de ejemplo de actividades de mensajería
Un BestPriceFinder
servicio llama a varios servicios de aerolíneas para encontrar el mejor precio de billete para una ruta determinada. La implementación de este escenario requeriría que use las actividades de mensaje para recibir la solicitud de precios, recuperar los precios de los servicios back-end y responder a la solicitud de precio con el mejor precio. También requeriría usar otras actividades para uso inmediato para crear la lógica empresarial para calcular el mejor precio.
WorkflowServiceHost
La clase WorkflowServiceHost es el host de flujo de trabajo para uso inmediato que hospeda varias instancias, la configuración y la mensajería de WCF (aunque no es necesario que los flujos de trabajo usen la mensajería para que se hospeden). También se integra con la persistencia, el seguimiento y el control de instancias a través de un conjunto de comportamientos de servicio. Al igual que en WCF ServiceHost, el WorkflowServiceHost puede hospedarse automáticamente en una aplicación de consola,WinForms/WPF o en un servicio de Windows, o hospedado en web (como un archivo .xamlx) en IIS o WAS.
Introducción a host de servicio de flujo de trabajo
En Visual Studio 2010, cree un proyecto de aplicación de servicio de flujo de trabajo de WCF: este proyecto se configurará para usarlo WorkflowServiceHost en un entorno de host web.
Para hospedar un flujo de trabajo que no sea de mensajería, agregue un personalizado WorkflowHostingEndpoint que creará la instancia basada en un mensaje.
Las instancias de flujo de trabajo se pueden controlar (por ejemplo, suspenderse o terminarse) añadiendo WorkflowControlEndpoint a WorkflowServiceHost y luego usando WorkflowControlClient.
Los ejemplos para el WorkflowServiceHost se pueden encontrar en las secciones siguientes:
Aplicación: Administración de instancias suspendidas
Introducción a los servicios de flujo de trabajo de hospedaje
Escenario WorkflowServiceHost
Un servicio BestPriceFinder llama a varios servicios de aerolíneas 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 usaría las actividades de mensaje para recibir la solicitud de precios, recuperar los precios de los servicios back-end y responder a la solicitud de precio con el mejor precio.
Correlación
Una correlación es una de las dos cosas:
Una manera de agrupar mensajes; es decir, la relación entre un mensaje de solicitud y su respuesta.
Una manera de asignar un fragmento de datos a una instancia de servicio
Introducción
Para empezar a trabajar con la correlación, cree un proyecto en Visual Studio. Cree una variable de tipo CorrelationHandle.
Un ejemplo de correlación que se usa para agrupar mensajes es una correlación Request-Reply que agrupa los mensajes juntos.
En una actividad Receive, haga clic en la propiedad CorrelationInitializers y agregue un elemento RequestReplyCorrelationInitializer con la variable de tipo CorrelationHandle creada anteriormente en el primer paso.
Cree una SendReply actividad haciendo clic derecho en el Receive y seleccionando "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 una correlación basada en contenido que asigna un fragmento de datos (por ejemplo, un identificador de pedido) a una instancia de flujo de trabajo determinada.
- En cualquier actividad de mensajería, haga clic en la
CorrelationInitializers
propiedad y agregue un QueryCorrelationInitializer mediante la CorrelationHandle variable creada anteriormente. Haga doble clic en la propiedad deseada en el mensaje (por ejemplo, OrderID) en el menú desplegable. Establezca laCorrelatesWith
propiedad en la CorrelationHandle variable usada anteriormente.
- En cualquier actividad de mensajería, haga clic en la
Escenario de correlación
Un flujo de trabajo de procesamiento de pedidos se usa para controlar la creación y actualización de pedidos existentes que están en proceso. La implementación de este escenario requeriría hospedar el flujo de trabajo en WorkflowServiceHost y usar las actividades de mensajería. También requeriría correlación en función de 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 características difíciles de encontrar. En .NET Framework 4.6.1, nos hemos centrado en ayudar a los usuarios de WCF a configurar sus servicios con las siguientes características:
Quitar la necesidad de una configuración explícita por servicio. Si no configura ningún <elemento de servicio> para el servicio y el servicio no define ningún punto de conexión mediante programación, se agregará automáticamente un conjunto de puntos de conexión al servicio, una por dirección base de servicio y por contrato implementada por el servicio.
Permite al usuario definir valores predeterminados para los enlaces y comportamientos de WCF, que se aplicarán a los servicios sin ninguna configuración explícita.
Los puntos de conexión estándar definen puntos de conexión preconfigurados reutilizables, que tienen valores fijos para una o varias de las propiedades del punto de conexión (dirección, enlace y contrato) y permiten definir propiedades personalizadas.
Por último, ConfigurationChannelFactory<TChannel> permite realizar la administración central de la configuración del cliente WCF, útil en escenarios en los que se selecciona o cambia la configuración después del tiempo de carga del dominio de la aplicación.
Introducción
Escenarios de configuración simplificados
Un desarrollador de ASMX experimentado quiere empezar a usar WCF. Sin embargo, WCF parece demasiado complicado! ¿Qué es toda esa información que necesito escribir en un archivo de configuración? En .NET 4, incluso puede decidir no tener un archivo de configuración en absoluto.
Un conjunto existente de servicios WCF es muy difícil de configurar y mantener. El archivo de configuración tiene miles de líneas de código XML que son extremadamente peligrosas para tocar. Se necesita ayuda para reducir esa cantidad de código a algo más fácil de administrar.
Solucionador de contratos de datos
En .NET Framework 3.5, había algunas limitaciones en el diseño de tipos conocidos:
No era posible agregar tipos conocidos dinámicamente, durante la serialización o deserialización.
Los serializadores no podían tratar información de xsi:type desconocida.
No era posible que los usuarios especificaran qué xsi:type quisieran que aparezca en la transmisión para, por ejemplo, reducir el tamaño de una instancia de serialización en la transmisión.
DataContractResolver resuelve estos problemas en .NET Framework 4.5.
Introducción
Ejemplos:
Escenarios de resolución de contratos de datos
Evitar tener que declarar decenas de KnownTypeAttribute objetos en un servicio.
Reducir el tamaño del blob XML.
Diagrama de flujo
Diagrama de flujo es un paradigma conocido para representar visualmente problemas de dominio. Es un nuevo estilo de flujo de control que estamos introduciendo en .NET Framework 4. Una característica principal del 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
En Visual Studio 2012, cree una aplicación de consola de flujo de trabajo. Agregue un diagrama de flujo en el diseñador de flujo de trabajo.
La característica diagrama de flujo usa las siguientes clases:
Ejemplos:
Documentación del diseñador:
Escenarios de diagrama de flujo
Se puede usar una actividad de diagrama de flujo para implementar un juego de adivinación. El juego de adivinación es muy sencillo: el equipo selecciona un número aleatorio y el jugador tiene que adivinar ese número. Cuando el jugador envía cada suposición, el equipo les muestra una sugerencia (es decir, "pruebe un número inferior"). Si el jugador encuentra el número en menos de 7 intentos, recibe una felicitación especial de la computadora. 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 procedimientos proporcionan un mecanismo para modelar el flujo de control secuencial mediante conceptos que son familiares para los programadores. Estas actividades permiten construcciones de lenguaje de programación estructuradas tradicionalmente y, cuando proceda, proporcionan paridad de lenguaje con lenguajes de procedimientos comunes, como C# y Visual Basic.
Introducción
En Visual Studio 2012, cree una aplicación de consola de flujo de trabajo. Agregue actividades de procedimientos en el diseñador de flujo de trabajo.
Ejemplos:
Documentación del diseñador:
Escenarios de actividad procedimental
Parallel: un sistema de administración de documentos de intranet tiene un flujo de trabajo de aprobación de documentos. Los documentos deben ser aprobados por personas de varios departamentos para poder publicarlos en la intranet. No hay un orden establecido para las aprobaciones; pueden producirse en cualquier momento mientras el documento está en la fase "pendiente de aprobación". Cuando un usuario envía un documento para su revisión, debe ser aprobado por su administrador directo, el administrador de intranet y el administrador de comunicaciones interno.
ParallelForEach<T>: una aplicación WF administra las compras corporativas dentro de una gran empresa. Las reglas corporativas dictan 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 empresa. Una vez seleccionados y notificados estos proveedores, la empresa esperará sus propuestas económicas. Las propuestas pueden llegar en cualquier orden. Para implementar este escenario en WF, usamos un ParallelForEach<T> que recorrerá nuestra colección de proveedores y les pedirá sus propuestas económicas. Una vez recopiladas 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 métodos genéricos. También permite ejecutar el método de forma sincrónica y asincrónica.
Introducción
En Visual Studio 2012, cree una aplicación de consola de flujo de trabajo. Agregue una InvokeMethod actividad en el diseñador de flujo de trabajo y configure métodos estáticos e de instancia en él.
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, es necesario 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.
Es necesario 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 TryCatch actividad proporciona un mecanismo para detectar excepciones que se producen durante la ejecución de un conjunto de actividades independientes (similar a la construcción Try/Catch en C# y Visual Basic). 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
En Visual Studio 2012, cree una aplicación de consola de flujo de trabajo. Agregue una TryCatch actividad en el diseñador de flujo de trabajo.
Ejemplo: Control de errores en una actividad de diagrama de flujo mediante TryCatch
Documentación del diseñador: diseñadores de actividad de control de errores
Escenarios de control de errores
Es necesario ejecutar un conjunto de actividades y es necesario ejecutar 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.
Selección de la actividad
La Pick actividad proporciona modelado de flujo de control basado en eventos en WF. Pick contiene muchas ramas en las que cada rama espera a que se produzca un evento determinado antes de ejecutarse. En esta configuración, el comportamiento de Pick es similar al de Switch<T>, ya que la actividad solo ejecutará un evento del conjunto de eventos de los que está realizando escuchas. Cada rama está controlada por eventos y el evento que se produce ejecuta primero la rama correspondiente. El resto de bifurcaciones se cancelan y se dejan de realizar escuchas de eventos.
Introducción
En Visual Studio 2012, cree una aplicación de consola de flujo de trabajo. Agregue una Pick actividad en el diseñador de flujo de trabajo.
Ejemplo: uso de la actividad Pick
Documentación del diseñador: Seleccionar diseñador de actividad
Elegir escenario
Se debe solicitar al usuario que introduzca los datos. En circunstancias normales, el desarrollador usaría una llamada de 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 escriba algo. En este escenario, se necesita un tiempo de espera para desbloquear una actividad de bloqueo. Un escenario común es aquel que requiere que se complete una tarea dentro de un 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 de software genérico que le permite controlar cómo fluyen los mensajes WCF entre los clientes y los servicios. El servicio de enrutamiento le permite desacoplar los clientes de los servicios, lo que le ofrece mucha más libertad en términos de las configuraciones que puede admitir y la flexibilidad que tiene al considerar cómo hospedar sus servicios. En .NET Framework 3.5, los clientes y los servicios estaban estrechamente acoplados; un cliente tenía que saber sobre todos los servicios a los que necesitaba hablar y 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 servicios siempre tenían que usar las mismas vinculaciones.
Los servicios rara vez se factorizaron bien: es más fácil comunicarse con el cliente con un servicio que implementa todo, en lugar de necesitar elegir entre varios servicios.
El servicio de 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:
Enrutamiento basado en contenido (MessageFilter los objetos examinan un mensaje para determinar dónde se debe enviar).
Protocolo de puente (transporte & mensaje)
Control de errores (el enrutador detecta excepciones de comunicación y no puede establecer comunicación con los puntos de conexión de reserva)
Actualización dinámica (en memoria) de MessageFilterTable<TFilterData> y de la configuración de enrutamiento.
Introducción
Documentación: Enrutamiento
Blog: Reglas de enrutamiento
Escenarios de enrutamiento
El servicio de enrutamiento es útil en los escenarios siguientes:
Los clientes pueden comunicarse con varios servicios sin tener que abordarlos directamente.
Los clientes pueden realizar lógica adicional en una solicitud para determinar dónde enrutarla
Descompone las operaciones que realiza un cliente 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.
Los clientes se pueden habilitar para ser más sólidos frente a errores o la falta de disponibilidad de los servicios.
Detección de WCF
La detección de WFC es una tecnología de .NET Framework que permite incorporar un mecanismo de detección a la infraestructura de las aplicaciones. Puede usarlo para que el servicio sea reconocible y configure los clientes para que busquen 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 el estándar WS-Discovery. Está diseñado para ser interoperable, extensible y genérico. El producto admite dos modos de funcionamiento:
Administrado: donde hay una entidad en la red que conoce los servicios existentes, los clientes la consultan directamente para obtener información. Esto es análogo a Active Directory.
Ad hoc: donde los clientes utilizan los mensajes de multidifusión para buscar los servicios.
Además, los mensajes de detección son independientes del protocolo de red; puede usarlos sobre cualquier protocolo que admita los requisitos de modo. Por ejemplo, los mensajes de multidifusión de detección pueden enviarse 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 flexibilidad de características, permiten adaptar la detección específicamente a la solución.
Introducción
Documentación: WCF Discovery
Ejemplos: Descubrimiento (Ejemplos)
Escenarios de detección
Un desarrollador no desea programar de forma rígida los puntos de conexión, porque no se sabe cuándo estará disponible un servicio determinado. En su lugar, el desarrollador quiere elegir un servicio en tiempo de ejecución. Se necesita más desacoplamiento, solidez y configuración automática entre los componentes de la aplicación.
Seguimiento
El seguimiento de flujos de trabajo proporciona informació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 mediante 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
En Visual Studio 2010, cree un proyecto de aplicación de servicio de flujo de trabajo de WCF. Se colocará un par Receive y SendReply en el lienzo para empezar.
Abra web.config y agregue un comportamiento de seguimiento de ETW sin ningún perfil.
Se usa el perfil predeterminado.
Abra el visor de eventos y habilite el canal analítico en el siguiente nodo: Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Application Server-Applications. Haga clic con el botón derecho en Análisis y seleccione Habilitar registro.
Ejecute el servicio de flujo de trabajo.
Observe los eventos de seguimiento de flujo de trabajo en el visor de eventos.
Ejemplos: Seguimiento
Documentación conceptual: Seguimiento y seguimiento de flujos 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 indica al almacén de instancias que cargue el estado de la instancia cuando llegue un mensaje para esa instancia o una actividad de retraso expira.
Introducción
En Visual Studio 2012, cree un flujo de trabajo que contenga una actividad implícita o explícita Persist . Agregue el comportamiento de SqlWorkflowInstanceStore al host de servicio de flujo de trabajo. Esto se puede hacer en el código o en el archivo de configuración de la aplicación.
Ejemplos: Persistencia
Documentación conceptual: Almacén de instancias de flujo de trabajo de SQL.