Share via


Erstellen und Verwenden von Überwachungsprofilen

Überwachungsprofile werden zum Filtern von Überwachungsinformationen verwendet, sodass nur wichtige Überwachungsinformationen empfangen werden. Zu diesem Zweck verwenden Überwachungsdienste ein TrackingProfile-Objekt, um Überwachungsinformationen anzufordern. Beim Start einer neuen Workflowinstanz ruft das Überwachungsframework für jeden Überwachungsdienst, der mit der Laufzeit registriert ist, TryGetProfile, auf. Der Typ der Workflowinstanz wird diesem Anruf als Parameter bereitgestellt. Sollen vom Überwachungsdienst Überwachungsinformationen für die betreffende Instanz empfangen werden (wird normalerweise vom Typ der ausgeführten Instanz bestimmt), wird true zurückgegeben und ein TrackingProfile-Objekt als out-Parameter angegeben. Das TrackingProfile-Objekt beinhaltet Informationen, die der Überwachungslaufzeit mitteilen, welche Ereignisse und Daten vom Überwachungsdienst empfangen werden sollen. Wenn vom Überwachungsframework ein Ereignis empfangen wird, das im Überwachungsprofil angegeben ist, werden die Ereignisinformationen mithilfe eines Überwachungskanals an den Überwachungsdienst gesendet.

Überwachungsprofile können als XML-Dateien dargestellt werden, die das in Windows Workflow Foundation definierte TrackingProfile-Schema verwenden. Überwachungsprofile verfügen auch über ein komplexes Objektmodell, das ihre Details zusammenfasst. Sie können ein Überwachungsprofil mithilfe des Objektmodells oder von XML erstellen. Allerdings müssen Überwachungsprofile, die im XML-Format dargestellt werden, in ein TrackingProfile-Objekt deserialisiert werden, da von der Laufzeit ein TrackingProfile-Objekt erwartet wird.

Warnung

Werden in den Überwachungsprofilen nicht englischsprachige Variablen verwendet, muss die Überwachungsprofildatei mit einer Unicode-Codierung gespeichert werden.

Modellelemente von Überwachungsprofilobjekten

Ein TrackingProfile-Objekt ermöglicht es Ihnen, Workflowinstanzereignisse, einzelne Aktivitätsereignisse und benutzerdefinierte Benutzerereignisse zu überwachen. Das Modell des Überwachungsprofilobjekts verwendet verschiedene Objekte, um ein Überwachungsprofil zur genauen Kontrolle der Informationen zu erstellen, die der Überwachungsdienst vom Laufzeitmodul empfängt.

Überwachungspunkte

Ein TrackingProfile beinhaltet drei verschiedene Typen von Überwachungspunkten. Drei Arten von Überwachungsereignissen können gefiltert werden:

  • Aktivitätsstatusereignisse

  • Workflowstatusereignisse

  • Benutzerereignisse

Sie können der WorkflowTrackPoints-Eigenschaft WorkflowTrackPoint-Objekte hinzufügen, um bestimmte Workflowstatusereignisse abzugleichen, der ActivityTrackPoints-Eigenschaft ActivityTrackPoint-Objekte hinzufügen, um bestimmte Aktivitätsstatusereignisse abzugleichen und der UserTrackPoints-Eigenschaft UserTrackPoint-Objekte hinzufügen, um bestimmte Benutzerereignisse abzugleichen.

WorkflowTrackPoint

Bei jeder Statusänderung der Workflowinstanz gibt die Workflowinstanz an die Laufzeitverfolgungsinfrastruktur ein Workflowstatusereignis aus, das auf einem der TrackingWorkflowEvent-Werte basiert. WorkflowTrackPoint definiert alle relevanten Punkte, an denen bestimmte Typen von Workflowstatusereignissen während der Ausführung einer Workflowinstanz eintreten. Diese Statusereignisse werden in der MatchingLocation-Eigenschaft von WorkflowTrackPoint definiert. Informationen zum Verhältnis zwischen Überwachungspositionen und WorkflowTrackPoint finden Sie im Abschnitt "Überwachungspositionen" in diesem Thema.

Durch Hinzufügen von Annotations kann WorkflowTrackPoint auch zusätzliche zugeordnete Informationen angeben, die von der Laufzeitverfolgungsinfrastruktur gesendet werden sollen. Anmerkungen sind definierte Zeichenfolgen mit Informationen, die WorkflowTrackPoint zugeordnet werden. Eine Anmerkung kann z. B. Informationen zum möglichen Ausführungspfad enthalten, den der Workflow ab diesem Überwachungspunkt folgt, oder sie enthält Informationen, die in einer Anwendung angezeigt werden.

ActivityTrackPoint

Bei jeder Änderung eines Aktivitätsstatus gibt die Workflowinstanz an die Laufzeitverfolgungsinfrastruktur ein Aktivitätsstatusereignis aus, das auf einem der ActivityExecutionStatus-Werte basiert. ActivityTrackPoint definiert einen relevanten Punkt im möglichen Ausführungspfad eines Stammworkflows, der durch ein solches Aktivitätsstatusereignis qualifiziert ist. ActivityTrackPoint beinhaltet Positionen, die beim Abgleich berücksichtigt werden, der mithilfe der MatchingLocations-Eigenschaft durchgeführt wird, Positionen, die unter Verwendung der ExcludedLocations-Eigenschaft vom Abgleich ausgeschlossen werden, sowie die Daten, die von der Workflowinstanz extrahiert werden sollen, wenn der Überwachungspunkt mithilfe der Extracts-Eigenschaft abgeglichen wird.

Die Extracts-Eigenschaft ist eine ExtractCollection, die ActivityDataTrackingExtract-Objekte oder WorkflowDataTrackingExtract-Objekte beinhaltet. Beim Hinzufügen eines ActivityDataTrackingExtract-Objekts zu ExtractCollection verweist die Member-Eigenschaft auf ein Feld oder eine Eigenschaft der Aktivität, einen Member eines derartigen Felds oder einer Eigenschaft oder auf ein einzelnes Element eines Felds oder einer Eigenschaft (oder auf einen Member von beiden), mit dem die IEnumerable-Schnittstelle implementiert wird. Der Wert des Members wird in die Body-Eigenschaft des zugeordneten ActivityTrackingRecord eingefügt, wenn ActivityTrackPoint abgeglichen wird. Das WorkflowDataTrackingExtract-Objekt kann verwendet werden, um Member des Workflows während dieses bestimmten Aktivitätsereignisses zu extrahieren.

UserTrackPoint

Ein Aktivitätsdesigner oder ein Workflow-Designer kann mit den überladenen Methoden System.Workflow.ComponentModel.Activity.TrackData(System.Object) und System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) den Workflow so einrichten, dass Daten als Benutzerereignis an die Laufzeitverfolgungsinfrastruktur ausgegeben werden. Die ausgegebenen Daten werden als Benutzerdaten bezeichnet. Aktivitätsstatusereignisse und Workflowstatusereignisse treten nur bei Statusänderungen ein. Im Unterschied dazu können Benutzerereignisse an jeder in einem Workflow eingerichteten Position stattfinden. Es gibt viele Gründe dafür, warum ein Workflow zum Ausgeben von Benutzerereignissen eingerichtet wird. Möglicherweise möchte ein Workflow-Designer logische Zustandsinformationen zum Fortschritt eines Workflows übermitteln, oder ein Aktivitätsdesigner möchte Aktivitätsmembern das Auslösen von Ereignissen auch über Aktivitätsstatusänderungen hinaus ermöglichen.

UserTrackPoint definiert einen relevanten Punkt im möglichen Ausführungspfad einer Stammworkflowinstanz, die einem Benutzerereignis zugeordnet ist. UserTrackPoint enthält in den Abgleich eingeschlossene Positionen, vom Abgleich ausgeschlossene Positionen und alle weiteren Daten, die bei einem Abgleich des Überwachungspunkts aus der Workflowinstanz extrahiert werden sollten. Sie können System.Workflow.Runtime.Tracking.TrackingProfile.UserTrackPoints einen UserTrackPoint hinzufügen, um die Laufzeitverfolgungsinfrastruktur anzuweisen, beim Abgleich des Überwachungspunkts UserTrackingRecord an den Überwachungsdienst zu senden. Die Benutzerdaten werden in einem System.Workflow.Runtime.Tracking.UserTrackingRecord.UserData zurückgegeben. Ein einzelner UserTrackPoint kann an verschiedenen Punkten in der Workflowinstanz abgeglichen werden.

UserTrackingLocation enthält Übereinstimmungsbedingungen für eine Position, die einem Benutzerereignis im möglichen Ausführungspfad einer Workflowinstanz zugeordnet ist. Sie können MatchingLocations UserTrackingLocation-Objekte hinzufügen, um Positionen zu definieren, die beim Abgleich mit dem Überwachungspunkt eingeschlossen werden sollen. Dementsprechend können Sie ExcludedLocations UserTrackingLocation-Objekte hinzufügen, um Positionen zu definieren, die beim Abgleich mit dem Überwachungspunkt ausgeschlossen werden sollen. Informationen zum Verhältnis zwischen Überwachungspositionen und UserTrackPoint finden Sie im Abschnitt "Überwachungspositionen" in diesem Thema.

Sie können Extracts ActivityDataTrackingExtract-Objekte und WorkflowDataTrackingExtract-Objekte hinzufügen, um Daten anzugeben, die beim Abgleich des Überwachungspunkts aus der Workflowinstanz extrahiert werden sollen. Die extrahierten Daten werden in System.Workflow.Runtime.Tracking.UserTrackingRecord.Body zurückgegeben.

Sie können Annotations hinzufügen, um weitere, dem Überwachungspunkt zugeordnete Informationen anzugeben. Diese Anmerkungen werden in Annotations zurückgegeben.

Überwachungspositionen

Im vorherigen Abschnitt wurde erläutert, wie Überwachungspunkte TrackingProfile zugeordnet werden, um die Art der Ereignisse anzugeben, die vom im Laufzeitmodul von Windows Workflow Foundation verwendeten Überwachungsdienst verarbeitet werden. Diese Überwachungspunkte verwenden Überwachungspositionen, um bestimmte Typen in der Workflowdefinition abzugleichen.

WorkflowTrackingLocation

WorkflowTrackingLocation wird verwendet, um Ereignisse zu überwachen, die bei einer Änderung des Workflowinstanzstatus auftreten. Die in der WorkflowTrackingLocation-Klasse definierte Events-Eigenschaft ermöglicht das Festlegen der Liste der Workflowstatusereignisse, die abgeglichen werden. Diese Ereignisse können jede beliebige Kombination von Werten sein, die in der TrackingWorkflowEvent-Enumeration definiert sind.

ActivityTrackingLocation

Mit ActivityTrackingLocation werden Ereignisse überwacht, die bei einer Änderung des Status einer Aktivität in einer Workflowinstanz auftreten. ActivityTrackingLocation gleicht die Ereignisse ab, die von den in der ActivityTypeName-Eigenschaft oder der ActivityType-Eigenschaft angegebenen Aktivitäten ausgelöst werden. Die ActivityType-Eigenschaft wird beim Angeben eines Type-Objekts verwendet. Die ActivityTypeName-Eigenschaft kann jedoch verwendet werden, um einen nicht qualifizierten Namen des Verweisaktivitätstyps anzugeben. Wenn Sie beispielsweise den nicht qualifizierten Namen einer CodeActivity-Aktivität angeben möchten, legen Sie die ActivityTypeName-Eigenschaft auf "CodeActivity" fest.

Die in der ActivityTrackingLocation-Klasse definierte ExecutionStatusEvents-Eigenschaft ermöglicht das Filtern des Typs der Aktivitätsebenenereignisse, die vom Überwachungsdienst verarbeitet werden. Mindestens einer der ActivityExecutionStatus-Werte in der ExecutionStatusEvents-Auflistung muss abgeglichen werden, und jede TrackingCondition in der Conditions-Eigenschaft muss true für die abzugleichende ActivityTrackingLocation sein. Eine leere Liste gibt an, dass keine Ereignisse abgeglichen werden sollen.

Mit ActivityTrackingCondition erhalten Sie zusätzliche Steuerungsmöglichkeiten hinsichtlich der Genauigkeit der zu überwachenden Aktivität. Mit der Member-Eigenschaft der ActivityTrackingCondition-Klasse wird eine Eigenschaft oder ein Feld, ein Member einer Aktivitätseigenschaft oder eines Felds oder ein Einzelelement einer Aktivitätseigenschaft oder eines Felds (oder ein Member von beiden) angegeben, mit der bzw. dem die IEnumerable-Schnittstelle implementiert wird, die in der zu überwachenden Aktivität definiert ist. Die Value-Eigenschaft gibt den Wert an, mit dem die Member-Eigenschaft unter Verwendung des angegebenen Operator verglichen werden soll. Mit diesen drei Eigenschaften in der ActivityTrackingCondition-Klasse mit ActivityTrackingLocation kann beispielsweise angegeben werden, dass nur CodeActivity-Aktivitäten überwacht werden sollen, deren Name-Eigenschaft gleich "CodeActivity1" ist.

UserTrackingLocation

Ein Aktivitätsdesigner oder ein Workflow-Designer kann mit den überladenen Methoden System.Workflow.ComponentModel.Activity.TrackData(System.Object) und System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) einen Workflow so einrichten, dass Daten als Benutzerereignisse an die Laufzeitverfolgungsinfrastruktur ausgegeben werden. Die ausgegebenen Daten werden als Benutzerdaten bezeichnet. Aktivitäts- und Workflowstatusereignisse treten nur bei Aktivitäts- oder Workflowstatusänderungen ein. Im Gegensatz dazu können Benutzerereignisse an jeder in einem Workflow eingerichteten Position stattfinden. UserTrackingLocation definiert die Übereinstimmungsparameter für diese Positionen. Dazu wird Folgendes angegeben: der Typ der Benutzerdaten; der Typ der Aktivität, von der sie ausgegeben werden müssen; eine Auflistung mit Bedingungen, die eine oder mehrere Instanzen dieser Aktivität genauer bestimmen; ein optionaler Schlüsselname, dem die Benutzerdaten zugeordnet werden müssen; ob abgeleitete Typen der Benutzerdaten abgeglichen werden sollen; und ob Benutzerdaten abgeglichen werden sollen, die von Aktivitäten ausgegeben werden, die vom Typ der angegebenen Aktivität abgeleitet wurden.

Hinweis

Eine einzelne UserTrackingLocation kann sich auf mehrere tatsächliche Positionen im möglichen Ausführpfad einer Workflowinstanz beziehen.

Sie können UserTrackingLocation entweder der System.Workflow.Runtime.Tracking.UserTrackPoint.MatchingLocations-Eigenschaft oder der System.Workflow.Runtime.Tracking.UserTrackPoint.ExcludedLocations-Eigenschaft hinzufügen, um die Abgleichparameter für UserTrackPoint in TrackingProfile zu definieren.

Bedingungen

Drei allgemeine Bedingungen müssen in der folgenden Reihenfolge erfüllt werden, damit UserTrackingLocation von der Laufzeitverfolgungsinfrastruktur abgeglichen wird:

  • Die Aktivität, von der ein Benutzerereignis ausgegeben wurde, muss den Aktivitätssatz abgleichen, der von der ActivityType-Eigenschaft, der ActivityTypeName-Eigenschaft, der Conditions-Eigenschaft und der MatchDerivedActivityTypes-Eigenschaft angegeben wird.

  • Sofern vorhanden, muss der den Benutzerdaten zugeordnete Schlüssel mit der KeyName-Eigenschaft übereinstimmen.

  • Der vom Benutzerereignis ausgegebene Benutzerdatentyp muss mit dem Satz der Benutzerdatentypen übereinstimmen, die von der ArgumentType-Eigenschaft, der ArgumentTypeName-Eigenschaft und der MatchDerivedArgumentTypes-Eigenschaft angegeben werden.

Nur wenn alle drei Bedingungen erfüllt sind, wird UserTrackingLocation von der Laufzeitverfolgungsinfrastruktur als abgeglichen angesehen.

Soll UserTrackingLocation konfiguriert werden, muss entweder die ArgumentTypeName-Eigenschaft oder die ArgumentType-Eigenschaft festgelegt werden, um den Typ der abzugleichenden Benutzerdaten anzugeben. Zudem muss entweder die ActivityTypeName-Eigenschaft oder die ActivityType-Eigenschaft festgelegt werden, um den Typ der Aktivität anzugeben, von der die Benutzerdaten für den Abgleich ausgegeben werden müssen. Sie können Conditions ActivityTrackingCondition-Objekte hinzufügen, um die Aktivität genauer zu bestimmen, von der die Benutzerdaten ausgegeben werden müssen. Sie können die MatchDerivedArgumentTypes-Eigenschaft festlegen, um anzugeben, dass Benutzerdaten, die vom Benutzerdatentyp abgeleitet werden, der von der ArgumentTypeName-Eigenschaft oder der ArgumentType-Eigenschaft angegeben wird, abgeglichen werden sollen. Zudem besteht die Möglichkeit die MatchDerivedActivityTypes-Eigenschaft festzulegen, um anzugeben, dass Benutzerdaten abgeglichen werden sollen, die von Aktivitäten ausgegeben werden, die wiederum von dem Aktivitätstyp abgeleitet werden, der von der ActivityTypeName-Eigenschaft oder der ActivityType-Eigenschaft angegeben wird.

Sie können mit KeyName festlegen, dass nur Benutzerdaten, die dem angegebenen Schlüsselnamen zugeordnet sind, mit dieser UserTrackingLocation abgeglichen werden. Wenn die KeyName-Eigenschaft ein NULL-Verweis (Nothing in Visual Basic) ist, versucht die Laufzeitverfolgungsinfrastruktur nicht, den Schlüssel abzugleichen, der den Benutzerdaten zugeordnet ist.

Verwenden des Überwachungsprofil-Objektmodells

Wie bereits zuvor erwähnt, kann mit der API von Windows Workflow Foundation ein TrackingProfile-Objekt erstellt werden, das im Überwachungsdienst verwendbar ist. Das Objektmodell für das Überwachungsprofil verwendet den im vorherigen Abschnitt beschriebenen Klassensatz, um ein TrackingProfile-Objekt zu erstellen. Das TrackingProfile-Objekt enthält Überwachungspunkte, die mit Workflow, Aktivität und Benutzerverfolgungspunkten in Zusammenhang stehen. Jeder Überwachungspunkt verfügt zudem über einen Satz von Abgleichpositionen. Eine Abgleichposition beschreibt das Ereignis, das überwacht wird, und die Aktivität, die überwacht werden soll. Sie können neben den Abgleichpositionen auch ausgeschlossene Positionen definieren.

Die im Überwachungsprofil verwendeten Aktivitätseigenschaften sollten den Namen im Aktivitätsobjektmodell zugeordnet werden.

Warnung

Der Überwachungsdienst greift auf öffentliche Eigenschaften zu, die zur Überwachung in einem Überwachungsprofil eingerichtet werden. Dies kann zu unerwarteten Ergebnissen in einem Workflow führen.

Beispiel: Sie erstellen einen Workflow mit einer öffentlichen inkrementellen Indikatoreigenschaft, die bei jedem Zugriff auf die Indikatoreigenschaft erhöht wird. Wird ein Überwachungsprofil zur Überwachung der Indikatoreigenschaft erstellt, greift der Überwachungsdienst auf die Indikatoreigenschaft zu, und der Indikator wird erhöht. In diesem Szenario wird die Eigenschaft unerwartet von dem Überwachungsdienst erhöht, der außerhalb der Unternehmenslogik des Workflows liegt.

Im folgenden Codebeispiel wird gezeigt, wie ein Überwachungsprofil erstellt wird, mit dem eine CodeActivity-Aktivität und drei Ereignisse überwacht werden: Initialized, Executing und Closed. Das Profil besitzt einen einzelnen ActivityTrackPoint mit einer Abgleichposition.

static void CreateSimpleTrackingProfile()
{

    TrackingProfile myProfile = new TrackingProfile();
    ActivityTrackPoint myTrackPoint = new ActivityTrackPoint();
    ActivityTrackingLocation myLocation = new ActivityTrackingLocation(typeof(CodeActivity));
    myLocation.MatchDerivedTypes = false;
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Initialized);
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Executing);
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Closed);
    myTrackPoint.MatchingLocations.Add(myLocation);
    myProfile.ActivityTrackPoints.Add(myTrackPoint);
    myProfile.Version = new Version("1.0.0.0");
    TrackingProfileSerializer trackingProfileSerializer = new TrackingProfileSerializer();
    StringBuilder trackingProfileString = new StringBuilder();
    using (StringWriter writer = new StringWriter(trackingProfileString, CultureInfo.InvariantCulture))
    {
        trackingProfileSerializer.Serialize(writer, myProfile);
        Console.WriteLine(writer.ToString());
    }
}

Erstellen und Verwenden von XML für ein TrackingProfile

Überwachungsprofile können auch mithilfe von XML geschrieben werden. In diesem Fall muss das XML in TrackingProfile deserialisiert werden. Die entsprechende XML-Darstellung für das TrackingProfile, das im vorherigen Abschnitt erstellt wurde, sieht folgendermaßen aus.

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<TrackingProfile xmlns="https://schemas.microsoft.com/winfx/2006/workflow/trackin
gprofile" version="1.0.0.0">
    <TrackPoints>
        <ActivityTrackPoint>
            <MatchingLocations>
                <ActivityTrackingLocation>
                    <Activity>
                        <Type>System.Workflow.Activities.CodeActivity, System.Wo
rkflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad36
4e35</Type>
                        <MatchDerivedTypes>false</MatchDerivedTypes>
                    </Activity>
                    <ExecutionStatusEvents>
                        <ExecutionStatus>Initialized</ExecutionStatus>
                        <ExecutionStatus>Executing</ExecutionStatus>
                        <ExecutionStatus>Closed</ExecutionStatus>
                    </ExecutionStatusEvents>
                </ActivityTrackingLocation>
            </MatchingLocations>
        </ActivityTrackPoint>
    </TrackPoints>
</TrackingProfile>

Die XML-Darstellung von TrackingProfile kann auch mit dem Modell des Überwachungsprofilobjekts und der TrackingProfileSerializer-Klasse erstellt werden, die in Windows Workflow Foundation integriert ist.

Im folgenden Beispiel sehen Sie, wie ein TrackingProfile-Objekt in XML-Daten serialisiert wird.

TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder(),CultureInfo.InvariantCulture);
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();

Siehe auch

Referenz

TrackingProfile

Konzepte

Erstellen von benutzerdefinierten Überwachungsdiensten

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.