Freigeben über


Verwenden der Korrelation in Workflows

Die Korrelation wird vom Laufzeitmodul der Windows Workflow Foundation verwenden, um eingehenden Nachrichten innerhalb einer Workflowinstanz eine bestimmte HandleExternalEventActivity-Aktivität zuzuordnen. Die Instanzzuordnung erfolgt, wenn die Workflowinstanz InstanceId an den ExternalDataEventArgs-Konstruktor übergeben wird.

Zum Definieren einer Korrelation werden Schnittstellenattribute verwendet. Von der Schnittstelle der Workflowkommunikationsdienste der Windows Workflow Foundation können zusätzliche Metadaten für die Korrelation angegeben werden. Diese Korrelationsdaten sind zum Korrelieren einer Ereignisaktivität für eine Workflowinstanz erforderlich. Die Spezifikation der Korrelationsmetadaten besitzt das Format des CorrelationParameterAttribute-Attributs (einem Attribut für die Schnittstelle).

Hinweis

Die Bereitstellung von Korrelationsattributen für Kommunikationsschnittstellen ist optional. Standardmäßig sind Kommunikationsschnittstellen nicht korreliert. Korrelationsattribute sollten nur dann hinzugefügt werden, wenn durch die Korrelation eine Nachricht an eine bestimmte Aktivitätsinstanz übermittelt werden soll.

Schnittstellenattribute

In der folgenden Tabelle werden sämtliche Schnittstellenattribute beschrieben, die in Definitionen für Schnittstellen verwendet werden können, bei denen die Möglichkeit zur Nutzung durch die Workflowkommunikationsdienste der Windows Workflow Foundation besteht:

Attribut Beschreibung

CorrelationParameterAttribute

Gibt den Namen eines Parameters an, der in den für die Schnittstelle definierten Methoden und Ereignissen sowie für die Korrelation verwendet wird. Enthält die Methode oder das Ereignis einen formalen Parameter gleichen Namens, wird durch diesen Parameter der Korrelationswert für die Methode oder das Ereignis definiert. Enthält die Methode oder das Ereignis keinen entsprechenden Parameter, kann der Speicherort des Korrelationswerts durch die Methode oder das Ereignis mithilfe von CorrelationAliasAttribute definiert werden. Dieses Attribut kann mehrmals für eine Schnittstelle verwendet werden.

CorrelationInitializerAttribute

Wird für eine Methode oder ein Ereignis verwendet und gibt an, dass der Wert des Korrelationsparameters beim Aufrufen der Methode bzw. beim Auslösen des Ereignisses initialisiert wird. Für ein bestimmtes CorrelationToken muss eine Initialisierermethode oder ein Initialisiererereignis aufgerufen oder empfangen werden, bevor in der Konversation eine andere Methode oder ein anderes Ereignis ausgeführt werden kann. Jede Methode und jedes Ereignis, von der bzw. von dem eine neue Konversation (also neue Korrelationstokens) initialisiert wird, muss mit diesem Attribut gekennzeichnet werden. Die Methode oder das Ereignis muss für jedes Korrelationstoken entweder einen ordnungsgemäß benannten Parameter oder ein CorrelationAliasAttribute enthalten.

CorrelationAliasAttribute

Wird in der Methoden- oder Ereignisdefinition zum Überschreiben der CorrelationParameter-Einstellung für diesen Member verwendet. Das CorrelationAliasAttribute-Attribut dient zum Angeben des Speicherorts in den verfügbaren Parametern, aus denen der Korrelationswert abgerufen wird. Bei dem Zeichenfolgenparameter handelt es sich um einen punktierten Pfad für den formalen Parametersatz. Er gibt an, wo sich der übereinstimmende Datenwert befindet. Sind mehrere Korrelationstokens definiert, muss auch der benannte Name-Parameter für das Token angegeben werden.

Verwenden von Korrelationsattributen

CorrelationParameterAttribute dient zum Benennen der Konversations-ID (Korrelation). Anschließend wird jede Methode bzw. jedes Ereignis für die Schnittstelle mit einem formalen Parameter dieses Namens deklariert (beispielsweise id). Eine Veranschaulichung hierfür finden Sie im folgenden Codebeispiel für die ITaskService-Schnittstelle. Zum Beschreiben komplexerer Korrelationszuordnungen können auch andere Attribute verwendet werden. Nachdem die Instanz- und Korrelationsinformationen für eine Konversation bekannt sind, werden von der Klasse die Ereignisse der lokalen Dienste ausgelöst. Sie dient zum Angeben der Korrelation in den Parameterdaten des Aufrufs.

Das folgende Codebeispiel zeigt eine korrelierte Schnittstellendefinition für Workflowkommunikationsdienste (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;
    }

Vorgänge, Methoden oder Ereignisse, die zum Starten einer neuen Konversation verwendet werden, müssen mit dem CorrelationInitializerAttribute-Attribut versehen werden. Richtet sich ein Aufruf an die CorrelationInitializerAttribute-Methode m, verfügt die Dienstklasse über die Information, dass durch diesen Aufruf eine neue Konversation initialisiert wird. Die Lebensdauer der Workflowkonversation ist durch die Lebensdauer des Korrelationsverweises festgelegt. Ein Workflow wird zwischen Konversationen möglicherweise entladen und wieder geladen.

Das folgende Codebeispiel veranschaulicht eine Dienstklasse zum Implementieren von 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;
    }

Siehe auch

Referenz

CorrelationParameterAttribute
CorrelationInitializerAttribute
CorrelationParameterAttribute
ExternalDataEventArgs
HandleExternalEventActivity

Konzepte

Verwenden von lokalen Diensten in Workflows
Lokale Kommunikation und Korrelationsübersicht
Workflow- und Anwendungskommunikation

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.