Partager via


Utilisation de la corrélation dans les workflows

Le moteur d'exécution de Windows Workflow Foundation utilise la corrélation pour mapper un message entrant avec une activité HandleExternalEventActivity spécifique dans une instance de workflow. Le mappage à l'instance est effectué lorsque l'instance de workflow InstanceId est passée au constructeur ExternalDataEventArgs.

Vous définissez une corrélation en utilisant des attributs d'interface. L'interface des services de communication Windows Workflow Foundation peut spécifier les métadonnées supplémentaires pour la corrélation. Ces données de corrélation sont requises pour faire correspondre une activité d'événement à une instance de workflow. La spécification des métadonnées de la corrélation prend la forme d'un attribut sur l'interface, l'attribut CorrelationParameterAttribute.

NoteRemarque :

Fournir des attributs de corrélation pour les interfaces de communication est facultatif. Par défaut, les interfaces de communication sont sans corrélation. Les utilisateurs doivent ajouter des attributs de corrélation uniquement s'ils ont besoin de corrélation pour remettre un message à une instance d'activité spécifique.

Attributs de l'interface

Le tableau suivant décrit le jeu complet d'attributs d'interface qui peuvent être utilisés dans les définitions des interfaces qui sont consommables par les services de communication du workflow de Windows Workflow Foundation.

Attribut Description

CorrelationParameterAttribute

Utilisé pour spécifier le nom d'un paramètre utilisé dans les méthodes et événements définis dans l'interface et pour la corrélation. Si une méthode ou un événement contient un paramètre formel qui correspond au nom, ce paramètre définit la valeur de corrélation de cette méthode ou événement. Si la méthode ou l'événement n'a aucun paramètre de ce type, la méthode ou l'événement peut définir l'emplacement de la valeur de corrélation à l'aide d'un CorrelationAliasAttribute. Cet attribut peut apparaître plusieurs fois sur une interface.

CorrelationInitializerAttribute

Utilisé sur une méthode ou événement pour indiquer que la valeur du paramètre de corrélation est initialisée lorsque cette méthode est appelée ou que l'événement est déclenché. Pour un CorrelationToken donné, une méthode ou un événement d'initialiseur doit être appelé ou être reçu avant que toute autre méthode ou événement de la conversation s'exécute. Toute méthode ou événement qui peut initialiser une nouvelle conversation, autrement dit, de nouveaux jetons de corrélation, doit être marqué avec cet attribut. La méthode ou événement doit ou contenir un paramètre convenablement nommé ou un CorrelationAliasAttribute pour chaque jeton de corrélation.

CorrelationAliasAttribute

Utilisé sur la méthode ou définition d'événement pour substituer le paramètre CorrelationParameter de ce membre. L'attribut CorrelationAliasAttribute spécifie l'emplacement dans les paramètres disponibles desquels la valeur de corrélation est obtenue. Le paramètre de chaîne est un chemin d'accès en pointillés sur le jeu de paramètres formel. Il indique où se trouve la valeur des données correspondantes. Si plusieurs jetons de corrélation sont définis, le paramètre Name du jeton doit également être spécifié.

Utilisation des attributs de corrélation

CorrelationParameterAttribute nomme l'identificateur de conversation, corrélation. Chaque méthode ou événement sur l'interface est ensuite déclaré avec un paramètre formel de ce nom, par exemple id, tel qu'affiché dans l'exemple de code d'interface ITaskService suivant. Vous pouvez également utiliser d'autres attributs pour décrire un mappage de corrélation plus complexe. Une fois que l'instance et les informations de corrélation sont connues pour une conversation, la classe déclenche ses événements de service local. Il spécifie la corrélation dans les données de paramètre sur l'appel.

L'exemple de code suivant affiche une définition d'interface corrélée pour les services de communication du workflow, ITaskService.

    [Serializable]
    public class TaskEventArgs : ExternalDataEventArgs
    {
        private string id;

        public TaskEventArgs(Guid instanceId,string id)
            :base(instanceId)
        {
            this.id = id;
        }

        public string Id
        {
            get { return id; }
            set { id = value; }
        }
    }

    [ExternalDataExchange]
    [CorrelationParameter("taskId")]
    public interface ITaskService
    {
        [CorrelationInitializer]
        void CreateTask(string taskId, string assignee, string text);

        [CorrelationAlias("taskId", "e.Id")]
        event EventHandler<TaskEventArgs> TaskCompleted;
    }

Toute opération, méthode ou événement qui démarre une nouvelle conversation doit avoir CorrelationInitializerAttribute pour attribut. Si un appel est effectué auprès d'une méthode, la classe de service sait qu'une nouvelle conversation est initialisée avec cet appel. La durée de vie de la conversation du workflow dépend de celle de la référence de corrélation. Un workflow peut effectuer des déchargements et des chargements entre des conversations.

L'exemple de code suivant illustre une classe de service qui implémente ITaskService.

    public class TaskService : ITaskService
    {
        public void CreateTask(string taskId, string assignee, string text)
        {
            Console.WriteLine("task " + taskId + " created for " + assignee);
        }

        public void RaiseEvent(TaskEventArgs args)
        {
            if (TaskCompleted != null)
                TaskCompleted(null, args);
        }

        public event EventHandler<TaskEventArgs> TaskCompleted;
    }

Voir aussi

Référence

CorrelationParameterAttribute
CorrelationInitializerAttribute
CorrelationParameterAttribute
ExternalDataEventArgs
HandleExternalEventActivity

Concepts

Utilisation de services locaux dans les workflows
Vue d'ensemble de la communication locale et de la corrélation
Communication avec les workflows et les applications

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.