Freigeben über


Überwachungsprofile

Nachverfolgungsprofile enthalten Nachverfolgungsabfragen, die es einem Nachverfolgungsteilnehmer ermöglichen, Workflowereignisse zu abonnieren, die ausgegeben werden, wenn sich der Status einer Workflowinstanz zur Laufzeit ändert.

Überwachungsprofile

Mithilfe von Nachverfolgungsprofilen können Sie angeben, welche Nachverfolgungsinformationen für eine Workflowinstanz ausgegeben werden. Wenn kein Profil angegeben ist, werden alle Nachverfolgungsereignisse ausgegeben. Wenn ein Profil angegeben ist, werden die im Profil angegebenen Nachverfolgungsereignisse ausgegeben. Je nach Ihren Überwachungsanforderungen können Sie ein Profil schreiben, das sehr allgemein ist und einen kleinen Satz von Statusänderungen auf hoher Ebene für einen Workflow abonniert. Umgekehrt können Sie ein sehr detailliertes Profil erstellen, dessen resultierende Ereignisse reich genug sind, um später einen detaillierten Ausführungsfluss zu rekonstruieren.

Überwachungsprofile erscheinen als XML-Elemente innerhalb einer Standardkonfigurationsdatei des .NET Frameworks oder sind im Code angegeben. Das folgende Beispiel zeigt ein .NET Framework 4.6.1-Nachverfolgungsprofil in einer Konfigurationsdatei, das es einem Nachverfolgungsteilnehmer ermöglicht, die Started- und Completed-Workflowereignisse zu abonnieren.

<system.serviceModel>
    ...
    <tracking>
     <profiles>
      <trackingProfile name="Sample Tracking Profile">
        <workflow activityDefinitionId="*">
          <workflowInstanceQueries>
            <workflowInstanceQuery>
              <states>
                <state name="Started"/>
                <state name="Completed"/>
              </states>
            </workflowInstanceQuery>
          </workflowInstanceQueries>
        </workflow>
      </trackingProfile>
    </profiles>
  </tracking>
    ...
</system.serviceModel>

Das folgende Beispiel zeigt das entsprechende Tracking-Profil, das mit Code erstellt wurde.

TrackingProfile profile = new TrackingProfile()
{
    Name = "CustomTrackingProfile",
    Queries =
    {
        new WorkflowInstanceQuery()
        {
            // Limit workflow instance tracking records for started and
            // completed workflow states.
            States = { WorkflowInstanceStates.Started, WorkflowInstanceStates.Completed },
        }
    }
};

Überwachungsdatensätze werden innerhalb eines Überwachungsprofils mit dem ImplementationVisibility-Attribut über den Sichtbarkeitsmodus gefiltert. Eine zusammengesetzte Aktivität ist eine Aktivität auf oberster Ebene, die andere Aktivitäten enthält, die ihre Implementierung bilden. Der Sichtbarkeitsmodus gibt die Tracking-Datensätze an, die aus komplexen Aktivitäten innerhalb einer Workflowaktivität generiert werden, was angibt, ob die Aktivitäten, die die Implementierung bilden, nachverfolgt werden. Der Sichtbarkeitsmodus gilt auf der Ebene des Nachverfolgungsprofils. Die Filterung von Tracking-Datensätzen für einzelne Aktivitäten innerhalb eines Workflows wird durch die Abfragen innerhalb des Nachverfolgungsprofils gesteuert. Weitere Informationen finden Sie im Abschnitt "Abfragetypen des Tracking-Profils " in diesem Dokument.

Die beiden durch das implementationVisibility Attribut im Tracking-Profil angegebenen Sichtbarkeitsmodi sind RootScope und All. Durch die Verwendung des RootScope Modus' werden die Nachverfolgungsdatensätze für Aktivitäten unterdrückt, die die Implementierung einer Aktivität darstellen, falls eine zusammengesetzte Aktivität nicht der Ausgangspunkt eines Workflows ist. Dies bedeutet, dass, wenn eine Aktivität, die mit anderen Aktivitäten implementiert wird, einem Workflow implementationVisibility hinzugefügt und auf RootScope festgelegt ist, nur die Aktivität der obersten Ebene innerhalb dieser zusammengesetzten Aktivität nachverfolgt wird. Wenn eine Aktivität der Stamm des Workflows ist, stellt die Implementierung der Aktivität den Workflow selbst dar, und Überwachungsdatensätze werden für Aktivitäten ausgegeben, die die Implementierung bilden. Die Verwendung des Modus "Alle" erlaubt es, dass alle Nachverfolgungsdatensätze für die Hauptaktivität und alle ihre zusammengesetzten Aktivitäten emittiert werden.

Angenommen MyActivity ist eine zusammengesetzte Aktivität, deren Implementierung zwei Aktivitäten enthält: Activity1 und Activity2. Wenn diese Aktivität einem Workflow hinzugefügt wird und die Nachverfolgung mit einem Nachverfolgungsprofil aktiviert ist, auf das implementationVisibility mit RootScope festgelegt ist, werden Nachverfolgungsdatensätze nur für MyActivity ausgegeben. Für Aktivitäten "Activity1 " und "Activity2" werden jedoch keine Datensätze ausgegeben.

Wenn das Attribut für das implementationVisibility-Tracking-Profil jedoch auf All festgelegt ist, werden Tracking-Datensätze nicht nur für MyActivity, sondern auch für die Aktivitäten Activity1 und Activity2 erzeugt.

Das implementationVisibility Flag gilt für die folgenden Datensatztypen für die Nachverfolgung:

  • ActivityStateRecord

  • FaultPropagationRecord

  • CancelRequestedRecord

  • ActivityScheduledRecord

Hinweis

Von der Aktivitätsimplementierung ausgegebene CustomTrackingRecords werden von der implementationVisibility-Einstellung nicht herausgefiltert.

Die implementationVisibility-Funktionalität wird im Tracking-Profil im Code wie folgt als RootScope angegeben:

TrackingProfile sampleTrackingProfile = new TrackingProfile()
{
    Name = "Sample Tracking Profile",
    ImplementationVisibility = ImplementationVisibility.RootScope
};

Die implementationVisibility Funktionalität wird als All im Nachverfolgungsprofil in einer Konfigurationsdatei wie folgt angegeben:

<tracking>
      <profiles>
        <trackingProfile name="Shipping Monitoring" implementationVisibility="All">
          <workflow activityDefinitionId="*">
...
         </workflow>
        </trackingProfile>
      </profiles>
</tracking>

Die ImplementationVisibility Einstellung für das Nachverfolgungsprofil ist optional. Standardmäßig ist der Wert auf RootScope. Bei den Werten für dieses Attribut muss die Groß-/Kleinschreibung beachtet werden.

Abfragetypen für Überwachungsprofile

Nachverfolgungsprofile sind als deklarative Abonnements für Nachverfolgungsdatensätze strukturiert, mit denen Sie die Workflowlaufzeit für bestimmte Nachverfolgungsdatensätze abfragen können. Es gibt mehrere Abfragetypen, mit denen Sie verschiedene Objektklassen TrackingRecord abonnieren können. Nachverfolgungsprofile können in der Konfiguration oder über Code angegeben werden. Dies sind die am häufigsten verwendeten Abfragetypen:

  • WorkflowInstanceQuery – Hiermit können Sie Änderungen am Workflowinstanz-Lebenszyklus nachverfolgen, z. B. die bereits erwähnten Optionen Started und Completed. Dies WorkflowInstanceQuery wird verwendet, um die folgenden TrackingRecord Objekte zu abonnieren:

    Die Zustände, die abonniert werden können, werden in der WorkflowInstanceStates Klasse angegeben.

    Die Konfiguration bzw. der Code zum Abonnieren von Überwachungsdatensätzen auf Workflowinstanzebene für den Started-Instanzzustand mit dem WorkflowInstanceQuery-Objekt wird im folgenden Beispiel gezeigt.

    <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states>
            <state name="Started"/>
          </states>
        </workflowInstanceQuery>
    </workflowInstanceQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new WorkflowInstanceQuery()
            {
                States = { WorkflowInstanceStates.Started}
            }
        }
    };
    
  • ActivityStateQuery – Verwenden Sie dies, um Lebenszyklusänderungen der Aktivitäten zu verfolgen, aus denen eine Workflowinstanz besteht. Sie können beispielsweise jedes Mal nachverfolgen, wenn die Aktivität "E-Mail senden" innerhalb einer Workflowinstanz abgeschlossen ist. Diese Abfrage ist notwendig, damit ein TrackingParticipant-Objekt ActivityStateRecord-Objekte abonnieren kann. Die verfügbaren Zustände, die abonniert werden können, werden im ActivityStates-Objekt angegeben.

    Die Konfiguration und der Code zum Abonnieren von Aktivitätsstatusverfolgungsdatensätzen, die ActivityStateQuery für die SendEmailActivity Aktivität verwenden, werden im folgenden Beispiel gezeigt.

    <activityStateQueries>
      <activityStateQuery activityName="SendEmailActivity">
        <states>
          <state name="Closed"/>
        </states>
      </activityStateQuery>
    </activityStateQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityStateQuery()
            {
                ActivityName = "SendEmailActivity",
                States = { ActivityStates.Closed }
            }
        }
    };
    

    Hinweis

    Wenn mehrere activityStateQuery-Elemente denselben Namen haben, werden nur die Zustände im letzten Element im Tracking-Profil verwendet.

  • ActivityScheduledQuery – Mit dieser Abfrage können Sie eine aktivität nachverfolgen, die für die Ausführung durch eine übergeordnete Aktivität geplant ist. Die Abfrage ist notwendig, damit ein TrackingParticipant-Objekt ActivityScheduledRecord-Objekte abonnieren kann.

    Die Konfiguration und der Code zum Abonnieren von Datensätzen, die mit der untergeordneten SendEmailActivity-Aktivität verknüpft sind, deren Planung mit dem ActivityScheduledQuery-Objekt erfolgt, wird im folgenden Beispiel gezeigt.

    <activityScheduledQueries>
      <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </activityScheduledQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityScheduledQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • FaultPropagationQuery – Verwenden Sie dies, um die Behandlung von Fehlern zu verfolgen, die innerhalb einer Aktivität auftreten. Die Abfrage ist notwendig, damit ein TrackingParticipant-Objekt FaultPropagationRecord-Objekte abonnieren kann.

    Die Konfiguration und der Code zum Abonnieren von mit der Fehlerweitergabe verknüpften Datensätzen mithilfe von FaultPropagationQuery werden im folgenden Beispiel gezeigt.

    <faultPropagationQueries>
      <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" />
    </faultPropagationQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new FaultPropagationQuery()
            {
                FaultSourceActivityName = "SendEmailActivity",
                FaultHandlerActivityName = "NotificationsFaultHandler"
            }
        }
    };
    
  • CancelRequestedQuery – Hiermit können Sie Anforderungen zum Abbrechen einer untergeordneten Aktivität durch die übergeordnete Aktivität nachverfolgen. Die Abfrage ist notwendig, damit ein TrackingParticipant-Objekt CancelRequestedRecord-Objekte abonnieren kann.

    Die Konfiguration und der Code zum Abonnieren von mit dem Aktivitätsabbruch verknüpften Datensätzen mithilfe von CancelRequestedQuery werden im folgenden Beispiel gezeigt.

    <cancelRequestedQueries>
      <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </cancelRequestedQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CancelRequestedQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • CustomTrackingQuery – Verwenden Sie diese Informationen, um Ereignisse zu verfolgen, die Sie in Ihren Codeaktivitäten definieren. Die Abfrage ist notwendig, damit ein TrackingParticipant-Objekt CustomTrackingRecord-Objekte abonnieren kann.

    Die Konfiguration und der Code, die zum Abonnieren von Datensätzen, die im Zusammenhang mit benutzerdefinierten Nachverfolgungsdatensätzen stehen, mithilfe von CustomTrackingQuery verwendet werden, wird im folgenden Beispiel gezeigt.

    <customTrackingQueries>
      <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" />
    </customTrackingQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CustomTrackingQuery()
            {
                Name = "EmailAddress",
                ActivityName = "SendEmailActivity"
            }
        }
    };
    
  • BookmarkResumptionQuery – Hiermit können Sie die Wiederaufnahme eines Lesezeichens in einer Workflowinstanz nachverfolgen. Diese Abfrage ist notwendig, damit ein TrackingParticipant-Objekt BookmarkResumptionRecord-Objekte abonnieren kann.

    Die Konfiguration und der Code zum Abonnieren von mit der Wiederaufnahme von Lesezeichen verknüpften Datensätzen mithilfe von BookmarkResumptionQuery werden im folgenden Beispiel gezeigt.

    <bookmarkResumptionQueries>
      <bookmarkResumptionQuery name="SentEmailBookmark" />
    </bookmarkResumptionQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new BookmarkResumptionQuery()
            {
                Name = "sentEmailBookmark"
            }
        }
    };
    

Anmerkungen

Anmerkungen ermöglichen es Ihnen, Nachverfolgungsdatensätze beliebig mit einem Wert zu kategorisieren, der nach der Erstellungszeit konfiguriert werden kann. Sie können beispielsweise mehrere Nachverfolgungsdatensätze über mehrere Workflows hinweg mit "Mail Server" == "Mail Server1" markieren. Dies erleichtert das Auffinden aller Datensätze mit diesem Tag beim späteren Abfragen von Nachverfolgungsdatensätzen.

Hierzu wird einer Nachverfolgungsabfrage eine Anmerkung hinzugefügt, wie im folgenden Beispiel gezeigt.

<activityStateQuery activityName="SendEmailActivity">
  <states>
    <state name="Closed"/>
  </states>
  <annotations>
    <annotation name="MailServer" value="Mail Server1"/>
  </annotations>
</activityStateQuery>

So erstellen Sie ein Tracking-Profil

Nachverfolgungsabfrageelemente werden verwendet, um ein Nachverfolgungsprofil mithilfe einer XML-Konfigurationsdatei oder mit .NET Framework 4.6.1-Code zu erstellen. Nachfolgend sehen Sie ein Beispiel für ein Tracking-Profil, das mit einer Konfigurationsdatei erstellt wurde.

<system.serviceModel>
  <tracking>
    <profiles>
      <trackingProfile name="Sample Tracking Profile ">
        <workflow activityDefinitionId="*">
          <!--Specify the tracking profile query elements to subscribe for tracking records-->
        </workflow>
      </trackingProfile>
    </profiles>
  </tracking>
</system.serviceModel>

Warnung

Für ein WF mit dem Workflow-Diensthost wird das Nachverfolgungsprofil in der Regel mithilfe einer Konfigurationsdatei erstellt. Es ist auch möglich, ein Tracking-Profil mit Code mithilfe der Tracking-Profil- und Tracking-Abfrage-API zu erstellen.

Ein als XML-Konfigurationsdatei konfiguriertes Profil wird mithilfe einer Verhaltenserweiterung auf einen Nachverfolgungsteilnehmer angewendet. Dies wird einem WorkflowServiceHost hinzugefügt, wie im späteren Abschnitt "Konfigurieren der Nachverfolgung für einen Workflow" beschrieben.

Die Ausführlichkeit der Tracking-Datensätze, die vom Host ausgegeben werden, wird durch Konfigurationseinstellungen innerhalb des Tracking-Profils bestimmt. Ein Tracking-Teilnehmer abonniert Tracking-Datensätze, indem er Abfragen zu einem Tracking-Profil hinzufügt. Zum Abonnieren aller Überwachungsdatensätze müssen im Überwachungsprofil alle Überwachungsabfragen mit „*“ in den Namensfeldern der einzelnen Abfragen angegeben werden.

Hier sind einige der gängigen Beispiele für Tracking-Profile.

  • Ein Überwachungsprofil zum Abfragen von Workflowinstanz-Datensätzen und -fehlern

    <trackingProfile name="Instance and Fault Records">
      <workflow activityDefinitionId="*">
        <workflowInstanceQueries>
          <workflowInstanceQuery>
            <states>
              <state name="*" />
            </states>
          </workflowInstanceQuery>
        </workflowInstanceQueries>
        <activityStateQueries>
          <activityStateQuery activityName="*">
            <states>
              <state name="Faulted"/>
            </states>
          </activityStateQuery>
        </activityStateQueries>
      </workflow>
    </trackingProfile>
    
  • Ein Überwachungsprofil zum Abfragen aller benutzerdefinierten Überwachungsdatensätze

    <trackingProfile name="Instance_And_Custom_Records">
      <workflow activityDefinitionId="*">
        <customTrackingQueries>
          <customTrackingQuery name="*" activityName="*" />
        </customTrackingQueries>
      </workflow>
    </trackingProfile>
    

Siehe auch