Vue d'ensemble de la corrélation
La corrélation est le mécanisme qui permet de lier les messages de service de workflow entre eux ou à l'état de l'instance d'application, par exemple une réponse à une demande initiale ou un ID de commande particulier à l'état persistant d'un workflow de traitement de commandes. Cette rubrique offre une vue d'ensemble de la corrélation. Les autres rubriques de cette section fournissent des informations supplémentaires sur chaque type de corrélation.
Types de corrélation
La corrélation peut être basée sur le protocole ou basée sur le contenu. Les corrélations basées sur le protocole utilisent des données fournies par l'infrastructure de remise des messages pour assurer le mappage entre les messages. Les messages corrélés à l'aide de la corrélation basée sur le protocole sont liés entre eux à l'aide d'un objet en mémoire, tel qu'un RequestContext, ou par un jeton fourni par le protocole de transport. Les corrélations basées sur le contenu lient des messages entre eux à l'aide de données spécifiées par l'application. Les messages corrélés à l'aide de la corrélation basée sur le contenu sont liés entre eux par des données du message définies par l'application, telles qu'un numéro de client.
Les activités qui participent à la corrélation utilisent un objet CorrelationHandle pour regrouper les activités de messagerie. Par exemple, une activité Send utilisée pour appeler un service et une activité Receive successive, utilisée pour recevoir un rappel du service, partagent le même CorrelationHandle. Ce modèle de base est utilisé que la corrélation soit basée sur le contenu ou sur le protocole. Le handle de corrélation peut être défini explicitement sur chaque activité ou les activités peuvent être contenues dans une activité CorrelationScope. Les activités contenues dans une activité CorrelationScope possèdent leurs handles de corrélation managés par CorrelationScope et ne requièrent pas le CorrelationHandle pour être définies de manière explicite. Une étendue CorrelationScope fournit une gestion CorrelationHandle pour une corrélation demande-réponse et un type de corrélation supplémentaire. Les services de workflow hébergés à l'aide de WorkflowServiceHost ont la même gestion de corrélation par défaut que l'activité CorrelationScope. Cette gestion de corrélation par défaut signifie en général que dans de nombreux scénarios, les activités de messagerie dans une étendue CorrelationScope ou dans un service de workflow n'ont pas besoin que leur CorrelationHandle soit défini, à moins que plusieurs activités de messagerie soient en parallèle ou se chevauchent, par exemple deux activités Receive en parallèle ou deux activités Send suivies de deux activités Receive. Vous trouverez davantage d'informations sur la corrélation par défaut dans les rubriques de cette section qui présentent chaque type spécifique de corrélation. Pour plus d’informations sur les activités de messagerie, consultez Activités de messagerie et Procédure : Créer un service de workflow avec les activités de messagerie.
Corrélation basée sur le protocole
La corrélation basée sur le protocole utilise le mécanisme de transport pour lier des messages entre eux et à l'instance appropriée. Certaines corrélations de protocole fournies par le système incluent une corrélation demande-réponse et une corrélation basée sur le contexte. Une corrélation demande-réponse permet de corréler une seule paire d'activités de messagerie pour former une opération bidirectionnelle, par exemple Send appariée à ReceiveReply, ou Receive appariée à SendReply. Le Concepteur de flux de travail Visual Studio fournit également un jeu de modèles d’activité pour implémenter rapidement ce modèle. Une corrélation basée sur le contexte repose sur le mécanisme d’échange de contexte décrit dans .NET Context Exchange Protocol Specification (en anglais). Pour utiliser la corrélation basée sur le contexte, une liaison basée sur le contexte telle que BasicHttpContextBinding, WSHttpContextBinding ou NetTcpContextBinding doit être utilisée sur le point de terminaison.
Pour plus d’informations sur la corrélation de protocole, consultez Durable Duplex et Requête-Réponse. Pour plus d’informations sur l’utilisation des modèles d’activité du Concepteur de flux de travail Visual Studio, consultez Activités de messagerie. Pour obtenir un exemple de code, consultez l’exemple NetContextExchangeCorrelation.
Corrélation basée sur le contenu
La corrélation basée sur le contenu utilise quelques renseignements dans le message pour l'associer à une instance particulière. Contrairement à la corrélation basée sur le protocole, la corrélation basée sur le contenu exige que l'auteur de l'application déclare explicitement où se trouvent ces données dans chaque message connexe. Les activités qui utilisent la corrélation basée sur le contenu spécifient ces données de message à l'aide d'un objet MessageQuerySet. La corrélation basée sur le contenu est utile lors de la communication avec des services qui n’utilisent aucune liaison de contexte, comme BasicHttpContextBinding.