Share via


Información general de servicios de flujo de trabajo

Este tema es aplicable a Windows Workflow Foundation 4.

Los servicios de flujo de trabajo son servicios basados en WCF que se implementan mediante flujos de trabajo. Los servicios de flujo de trabajo son flujos de trabajo que utilizan actividades de mensajería para enviar y recibir mensajes de Windows Communication Foundation (WCF). .NET Framework versión 4 introduce varias actividades de mensajería que le permiten enviar y recibir mensajes dentro de un flujo de trabajo. Para obtener más información sobre las actividades de mensajería y cómo se pueden utilizar para implementar diversos patrones de intercambio de mensajes, vea Utilizar actividades de mensajería.

Ventajas de utilizar servicios de flujo de trabajo

Cuando las aplicaciones están cada vez más distribuidas, los servicios individuales se convierten en los responsables de llamar a otros servicios para descargar parte del trabajo. La implementación de estas llamadas como operaciones asincrónicas crea cierta complejidad en el código. El control de errores agrega complejidad, ya que hay que administrar excepciones y proporcionar información de seguimiento detallada. Algunos servicios suelen ejecutarse durante mucho tiempo y pueden ocupar valiosos recursos del sistema mientras esperan recibir información. Debido a estos problemas, las aplicaciones distribuidas suelen ser muy complejas y difíciles de escribir y mantener. Los flujos de trabajo son una manera natural de expresar la coordinación del trabajo asincrónico, sobre todo las llamadas a servicios externos. Los flujos de trabajo también son eficaces para representar procesos de negocio de ejecución prolongada. Son estas calidades las que convierten el flujo de trabajo en un gran recurso para compilar servicios en un entorno distribuido.

Implementar un servicio de flujo de trabajo

Al implementar un servicio de WCF, defina varios contratos que describan el servicio y los datos que envía y recibe. Los datos se representan como contratos de datos y contratos de mensajes. WCF y los servicios de flujo de trabajo usan definiciones de contratos de datos y de mensajes como parte de las descripciones del servicio. El servicio expone metadatos (con formato de WSDL) para describir las operaciones del servicio. En WCF, los contratos de servicios y los contratos de operaciones definen el servicio y las operaciones admitidos. Sin embargo, en un servicio de flujo de trabajo, estos contratos forman parte del propio proceso de negocio. Se exponen en metadatos mediante un proceso llamado inferencia del contrato. Cuando un servicio de flujo de trabajo se hospeda mediante WorkflowServiceHost, se examina la definición de flujo de trabajo y se genera un contrato en función del conjunto de actividades de mensajería presentes en el flujo de trabajo. En especial, se emplean las siguientes actividades y propiedades para generar el contrato:

Actividad Receive

Actividad SendReply

Actividad TransactedReceiveScope

El resultado final de inferencia del contrato es una descripción del servicio mediante las mismas estructuras de datos que los servicios de WCF y los contratos de operación. A continuación, esta información se utiliza para exponer WSDL para el servicio de flujo de trabajo.

Dd456797.note(es-es,VS.100).gifNota:
.NET Framework 4 no le permite escribir servicios de flujo de trabajo mediante una definición de contrato existente sin soporte de herramientas adicional. El proceso de inferencia del contrato descrito previamente crea los contratos de servicios de flujo de trabajo. Sin embargo, los contratos de mensajes y los contratos de datos poseen un soporte completo.

Servicios de flujo de trabajo y enlaces basados en MSMQ

WCF define dos enlaces basados en MSMQ: NetMsmqBinding y MsmqIntegrationBinding. Los enlaces basados en MSMQ se utilizan a menudo con servicios de flujo de trabajo debido a la naturaleza de ejecución prolongada de dichos servicios. Los enlaces basados en MSMQ tienen una propiedad ValidityDuration que especifica qué longitud pueden tener los mensajes de MSMQ para considerarse válidos. Debido a la naturaleza de ejecución prolongada de los servicios de flujo de trabajo, es posible que la duración de validez de un mensaje de MSMQ pueda finalizar antes de que el servicio de flujo de trabajo pueda procesarlo. Por lo tanto, es muy importante establecer la duración de validez de un enlace de MSMQ a un valor adecuado. Este valor se debe elegirse dependiendo del flujo de trabajo y de cómo procesa los mensajes. Por ejemplo, si tiene un flujo de trabajo con una actividad Receive seguido de una actividad personalizada que tarda 10 minutos en ejecutarse y seguido de otra actividad Receive, el valor correcto de ValidityDuration sería superior a 10 minutos.

Hospedar un servicio de flujo de trabajo

Al igual que los servicios de WCF, los servicios de flujo de trabajo se deben hospedar. Los servicios de WCF usan la clase ServiceHost para hospedar servicios, y los servicios de flujo de trabajo usan WorkflowServiceHost para hospedar servicios. Al igual que los servicios de WCF, los servicios de flujo de trabajo se pueden hospedar de diferentes maneras, como, por ejemplo:

  • En una aplicación administrada .NET Framework.

  • En Internet Information Server (IIS).

  • En el Servicio de activación de procesos de Windows (WAS).

  • En un servicio Windows administrado.

Los servicios de flujo de trabajo hospedados en una aplicación .NET Framework administrada o en un servicio Windows administrado crean una instancia de la clase WorkflowServiceHost y pasan una instancia de WorkflowService que contiene la definición de flujo de trabajo dentro de la propiedad Body. Una definición de flujo de trabajo que contiene actividades de mensajería se expone como un servicio de flujo de trabajo.

Para hospedar un servicio de flujo de trabajo en IIS o WAS, coloque el archivo .xamlx que contiene la definición del servicio de flujo de trabajo en un directorio virtual. Se crea automáticamente un extremo predeterminado (mediante BasicHttpBinding). Para obtener más información, vea Simplified Configuration. También puede colocar un archivo Web.config en el directorio virtual para especificar sus propios extremos. Si la definición de flujo de trabajo es en un ensamblado, puede colocar un archivo .svc en el directorio virtual y el ensamblado de flujo de trabajo en el directorio App_Code. El archivo .svc debe especificar el generador de host de servicio y la clase que implementa el servicio de flujo de trabajo. En el siguiente ejemplo, se indica cómo especificar el generador de host de servicio y especificar la clase que implementa el servicio de flujo de trabajo.

<%@ServiceHost Factory=" System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory
Service="EchoService"%>