Compartir a través de


Intercambio de contexto

Este tema es aplicable a Windows Workflow Foundation 4.

La correlación del contexto está basada en el mecanismo de intercambio de contexto descrito en la especificación del protocolo de intercambio de contexto de .NET. La correlación del contexto utiliza una cookie o un encabezado de contexto conocidos para relacionar los mensajes con la instancia correcta. Para utilizar la correlación del contexto, debe usarse un enlace basado en contexto como BasicHttpContextBinding, WSHttpContextBinding o NetTcpContextBinding en el extremo de WorkflowServiceHost. En este tema, se explica cómo utilizar la correlación del contexto con actividades de mensajería en un servicio del flujo de trabajo.

Usar correlación del contexto

Se utiliza la correlación del contexto cuando un cliente debe realizar llamadas repetidas en un servicio del flujo de trabajo y el servicio se hospeda mediante uno de los enlaces del contexto. Este tipo de correlación se inicializa mediante un par Receive/SendReply en el servicio del flujo de trabajo. El contexto se devuelve al cliente con la respuesta y, a continuación, el cliente adjunta dicho contexto en las llamadas al servicio posteriores.

Configurar la correlación del contexto en un servicio del flujo de trabajo

La correlación del contexto se inicializa mediante una clase ContextCorrelationInitializer, que está asociada a la actividad SendReply que responde al mensaje entrante inicial. En el siguiente ejemplo, la clase SendReply se configura para inicializar una correlación del contexto.

Variable<string> Item = new Variable<string>();
Variable<CorrelationHandle> OrderHandle = new Variable<CorrelationHandle>();

Receive StartOrder = new Receive
{
    CanCreateInstance = true,
    ServiceContractName = "IOrderService",
    OperationName = "StartOrder"
};

SendReply ReplyToStartOrder = new SendReply
{
    Request = StartOrder,
    CorrelationInitializers =
    {
        new ContextCorrelationInitializer
        {
            CorrelationHandle = OrderHandle
        }
    }
};
Ee358724.note(es-es,VS.100).gifNota:
Observe que el par Receive/SendReply usa la correlación de solicitud-respuesta predeterminada ofrecida por la administración CorrelationHandle implícita de WorkflowServiceHost. Para obtener más información, vea Solicitud-respuesta.

Las actividades de Receive subsiguientes en el servicio del flujo de trabajo pueden hacer referencia a la clase CorrelationHandle inicializada por SendReply en el ejemplo anterior.

Receive AddItem = new Receive
{
    ServiceContractName = "IOrderService",
    OperationName = "AddItem",
    CorrelatesWith = OrderHandle
};

A continuación, el extremo se configura en WorkflowServiceHost para utilizar un enlace basado en el contexto, como BasicHttpContextBinding.

<endpoint
  contract=”IOrderContract”
  binding = “basicHttpContextBinding”
  address=”https://localhost:8080/OrderService” />

Configurar la correlación del contexto en un cliente del flujo de trabajo

Cuando el cliente es otro flujo de trabajo, la correlación del contexto también se debe configurar en el cliente. En el flujo de trabajo del cliente, la clase ReceiveReply del par Send/ReceiveReply que realiza la llamada inicial al servicio del flujo de trabajo se debe configurar con una clase ContextCorrelationInitializer.

Variable<CorrelationHandle> cchandle = new Variable<CorrelationHandle>();
Send request = new Send
{
    // Activity configuration omitted.
};

ReceiveReply reply = new ReceiveReply
{
    Request = request,
    CorrelationInitializers = 
    {
        new ContextCorrelationInitializer
        {
            CorrelationHandle = cchandle
        }
    }
};

Una vez inicializada la correlación, las actividades Send subsiguientes pueden utilizar CorrelationHandle para invocar métodos en la misma instancia de servicio.

Send request2 = new Send
{
    CorrelatesWith = cchandle,
    // Remaining activity configuration omitted.
};

Tenga en cuenta que, en estos ejemplos, la correlación del contexto se ha configurado explícitamente. Si el flujo de trabajo del cliente no se hospeda también en WorkflowServiceHost, se debe configurar la correlación explícitamente, a menos que las actividades se incluyan en una actividad CorrelationScope.

Si el cliente que está realizando las llamadas al servicio del flujo de trabajo no es un flujo de trabajo, seguirá pudiendo realizar las llamadas repetidas, siempre y cuando pase explícitamente el contexto devuelto de la primera llamada al servicio del flujo de trabajo. Los servidores proxy generados mediante la adición de una referencia del servicio en Visual Studio 2010 almacenan y pasan este contexto de forma predeterminada.