Échange de contexte

Cette rubrique s'applique à Windows Workflow Foundation 4.

La corrélation de contexte est basée sur le mécanisme d'échange de contexte décrit dans .NET Context Exchange Protocol Specification (en anglais). La corrélation de contexte utilise un en-tête ou un cookie de contexte bien connu pour lier les messages à l'instance correcte. Pour utiliser la corrélation de contexte, une liaison basée sur le contexte, telle que BasicHttpContextBinding, WSHttpContextBinding ou NetTcpContextBinding, doit être utilisée sur le point de terminaison fourni à l'objet WorkflowServiceHost. Cette rubrique explique comment utiliser la corrélation de contexte avec des activités de messagerie dans un service de workflow.

Utilisation de la corrélation de contexte

La corrélation de contexte est utilisée lorsqu'un client doit faire des appels répétés dans un service de workflow et que le service est hébergé en utilisant l'une des liaisons de contexte. Ce type de corrélation est initialisé par une paire Receive/SendReply dans le service de workflow. Le contexte est renvoyé au client avec la réponse, puis le client joint ce contexte dans les appels ultérieurs au service.

Configuration de la corrélation de contexte dans un service de workflow

La corrélation de contexte est initialisée à l'aide d'un objet ContextCorrelationInitializer, associé à l'activité SendReply qui répond au message entrant initial. Dans l'exemple suivant, l'activité SendReply est configurée pour initialiser une corrélation de contexte.

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(fr-fr,VS.100).gifRemarque :
Notez que la paire Receive/SendReply utilise la corrélation demande-réponse par défaut, fournie par la gestion de CorrelationHandle implicite du WorkflowServiceHost. Pour plus d'informations, consultez Demande-réponse.

Les activités Receive ultérieures dans le service de workflow peuvent référencer le CorrelationHandle initialisé par l'activité SendReply dans l'exemple précédent.

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

Le point de terminaison est ensuite configuré sur le WorkflowServiceHost pour utiliser une liaison basée sur le contexte, telle que BasicHttpContextBinding.

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

Configuration de la corrélation de contexte dans un client workflow

Lorsque le client est un autre workflow, la corrélation de contexte doit être également configurée sur le client. Sur le workflow client, l'activité ReceiveReply de la paire Send/ReceiveReply qui effectue l'appel initial au service de workflow doit être configurée avec un objet 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
        }
    }
};

Une fois la corrélation initialisée, les activités Send ultérieures peuvent utiliser le CorrelationHandle pour appeler les méthodes sur la même instance du service.

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

Notez que dans ces exemples, la corrélation de contexte a été configurée de manière explicite. Si le workflow client n'est pas également hébergé dans un WorkflowServiceHost, la corrélation doit être configurée de manière explicite, sauf si les activités sont contenues dans une activité CorrelationScope.

Si le client qui appelle le service de workflow n'est pas un workflow, il peut toujours répéter ses appels, à condition de retransmettre de manière explicite le contexte retourné par le premier appel au service de workflow. Les proxys générés en ajoutant une référence de service dans Visual Studio 2010 stockent et transmettent ce contexte par défaut.