Uso de servicios locales en flujos de trabajo
Windows Workflow Foundation admite servicios de comunicación local en el entorno host de un flujo de trabajo y comunicaciones entre los flujos de trabajo mediante servicios web. Para obtener más información acerca de las comunicaciones de flujo de trabajo mediante servicios web, consulte Comunicación con otros flujos de trabajo.
Los servicios de comunicación de flujo de trabajo de Windows Workflow Foundation exponen una clase de servicio definida por el usuario al escritor del flujo de trabajo como llamadas al método y controladores de eventos para simplificar el modelado del intercambio de mensajes salientes y entrantes. La multiplexación de una instancia de clase de servicio única a varias instancias de flujo de trabajo permite al escritor host programar una ubicación única para mensajes salientes mientras que sigue señalando instancias de flujo de trabajo concretas al provocar eventos.
El diagrama siguiente muestra cómo un servicio de comunicación local se comunica con su aplicación host.
Las actividades HandleExternalEventActivity y CallExternalMethodActivity en la instancia de flujo de trabajo interactúan con los eventos y métodos que se declaran en una interfaz personalizada y se implementan en un servicio local personalizado. La actividad HandleExternalEventActivity responde a un evento determinado generado por la aplicación host e implementado por el servicio local. CallExternalMethodActivity invoca un método en el servicio local. Para obtener más información acerca de cómo usar HandleExternalEventActivity y CallExternalMethodActivity, consulte Uso de la actividad HandleExternalEventActivity y Uso de la actividad CallExternalMethodActivity.
Servicios de comunicación de flujo de trabajo
Los servicios de comunicación de flujo de trabajo de Windows Workflow Foundation implementan un mecanismo simple para que los objetos se comuniquen con una instancia de flujo de trabajo. La definición del canal de comunicaciones es una interfaz, y su implementación es una clase de servicio que se agrega al tiempo de ejecución para facilitar la comunicación.
Para la clase de servicio, el flujo de trabajo se comporta como cualquier otra clase, y se comunica con él provocando eventos y recibiendo llamadas al método. Para el flujo de trabajo, la interfaz de comunicación aparece como un canal que contiene receptores de eventos entrantes e invocaciones de método de operaciones salientes.
ExternalDataExchangeService convierte las declaraciones de método externas en la interfaz en llamadas al método en el objeto de servicio. La clase a la que podemos hacer referencia como servicio local provoca eventos, que son interceptados por el motor de tiempo de ejecución del flujo de trabajo y se entregan como mensajes entrantes para el flujo de trabajo.
El ejemplo de código siguiente muestra un ejemplo de cómo definir una interfaz de comunicación de flujo de trabajo local.
[ExternalDataExchange]
public interface ICommunicationService
{
void HelloHost(string message);
event EventHandler<ExternalDataEventArgs> HelloWorkflow;
}
Clase de servicio
Una clase de servicio implementa una interfaz que se utiliza para definir las comunicaciones con un flujo de trabajo. Todos los eventos en la interfaz son unidireccionales, es decir, no tienen ningún parámetro ref o out y tampoco un valor devuelto. Sin embargo, para las solicitudes salientes, los métodos en la interfaz pueden tener los parámetros ref y out y un valor devuelto.
El modelo de comunicaciones es de varios a uno: muchas instancias de flujo de trabajo, cada una de las cuales pueden estar manteniendo varias conversaciones, con este objeto de servicio Singleton. Esto significa que todas las llamadas salientes a un método determinado, m, de todos los flujos de trabajo es aceptado por el mismo m en el mismo objeto.
A la inversa, todas las llamadas entrantes se deben dirigir explícitamente a la instancia y conversación de flujo de trabajo correctas. Windows Workflow Foundation proporciona m con un mecanismo para distinguir la instancia y conversación de flujo de trabajo de la llamada saliente. Con estas dos piezas de información, el objeto puede dirigir de vuelta una respuesta a la conversación correcta en la instancia de flujo de trabajo correcta.
Windows Workflow Foundation proporciona el identificador de instancia del flujo de trabajo que hace la llamada en System.Workflow.Runtime.WorkflowEnvironment.WorkflowInstanceId, en el subproceso saliente que hace la llamada.
El ejemplo de código siguiente muestra una implementación de servicio de comunicación.
public class CommunicationService : ICommunicationService
{
public event EventHandler<ExternalDataEventArgs> HelloWorkflow;
public void HelloHost(string message)
{
Console.WriteLine("This is the message: {0}", message);
// Raise the HelloWorkflow event.
HelloWorkflow(null, new ExternalDataEventArgs(WorkflowEnvironment.WorkflowInstanceId));
}
}
Antes de iniciar una instancia de su flujo de trabajo, debe agregar ExternalDataExchangeService al motor de tiempo de ejecución del flujo de trabajo y después agregar su servicio de comunicación personalizado a ExternalDataExchangeService, tal y como se muestra en el ejemplo de código siguiente.
ExternalDataExchangeService externalService = new ExternalDataExchangeService();
workflowRuntime.AddService(externalService);
externalService.AddService(new CommunicationService());
Para ver un ejemplo de comunicación host con un servicio local, consulte HostCommunication Sample.
Consulte también
Referencia
HandleExternalEventActivity
CallExternalMethodActivity
Conceptos
Uso de la actividad HandleExternalEventActivity
Uso de la actividad CallExternalMethodActivity
Comunicación con otros flujos de trabajo
Flujo de trabajo y comunicación de la aplicación
Otros recursos
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.