Udostępnij za pośrednictwem


Profile śledzenia

Profile śledzenia zawierają zapytania śledzenia, które umożliwiają uczestnikowi śledzenia subskrybowanie zdarzeń przepływu pracy, które są emitowane, gdy stan wystąpienia przepływu pracy zmienia się w czasie wykonywania.

Profile śledzenia

Profile śledzenia służą do określania, które informacje śledzenia są emitowane dla wystąpienia przepływu pracy. Jeśli nie określono żadnego profilu, wszystkie zdarzenia śledzenia są emitowane. Jeśli zostanie określony profil, zdarzenia śledzenia określone w profilu będą emitowane. W zależności od wymagań dotyczących monitorowania można napisać profil, który jest bardzo ogólny, który subskrybuje niewielki zestaw zmian stanu wysokiego poziomu w przepływie pracy. Z drugiej strony można utworzyć bardzo szczegółowy profil, którego wynikowe zdarzenia są wystarczająco bogate, aby później odtworzyć szczegółowy przepływ wykonywania.

Profile śledzenia manifestują się jako elementy XML w standardowym pliku konfiguracji programu .NET Framework lub określonym w kodzie. Poniższy przykład dotyczy profilu śledzenia programu .NET Framework 4.6.1 w pliku konfiguracji, który umożliwia uczestnikowi śledzenia subskrybowanie zdarzeń Started i Completed przepływu pracy.

<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>

W poniższym przykładzie pokazano równoważny profil śledzenia utworzony przy użyciu kodu.

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 },
        }
    }
};

Rekordy śledzenia są filtrowane w trybie widoczności w profilu śledzenia przy użyciu atrybutu ImplementationVisibility . Działanie złożone to działanie najwyższego poziomu, które zawiera inne działania, które tworzą jego implementację. Tryb widoczności określa rekordy śledzenia emitowane z działań złożonych w ramach działania przepływu pracy, aby określić, czy działania, które tworzą implementację, są śledzone. Tryb widoczności ma zastosowanie na poziomie profilu śledzenia. Filtrowanie rekordów śledzenia poszczególnych działań w przepływie pracy jest kontrolowane przez zapytania w profilu śledzenia. Aby uzyskać więcej informacji, zobacz sekcję Śledzenie typów zapytań profilu w tym dokumencie.

Dwa tryby widoczności określone przez implementationVisibility atrybut w profilu śledzenia to RootScope i All. RootScope Użycie trybu pomija rekordy śledzenia dla działań, które tworzą implementację działania w przypadku, gdy działanie złożone nie jest katalogiem głównym przepływu pracy. Oznacza to, że po dodaniu działania implementowanego przy użyciu innych działań do przepływu pracy i implementationVisibility ustawieniu na RootScope tylko działanie najwyższego poziomu w ramach tego złożonego działania jest śledzone. Jeśli działanie jest elementem głównym przepływu pracy, implementacja działania jest samym przepływem pracy, a rekordy śledzenia są emitowane dla działań, które tworzą implementację. Użycie trybu Wszystkie umożliwia emitowanie wszystkich rekordów śledzenia dla działania głównego i wszystkich jego złożonych działań.

Załóżmy na przykład, że MyActivity jest działaniem złożonym, którego implementacja zawiera dwa działania: Activity1 i Activity2. Po dodaniu tego działania do przepływu pracy i włączeniu śledzenia z profilem śledzenia ustawionym implementationVisibility na RootScopewartość , rekordy śledzenia są emitowane tylko dla usługi MyActivity. Jednak żadne rekordy nie są emitowane dla działań Activity1 i Activity2.

Jeśli implementationVisibility jednak atrybut profilu śledzenia jest ustawiony na Allwartość , rekordy śledzenia są emitowane nie tylko dla elementu MyActivity, ale także dla działań Activity1 i Activity2.

Flaga implementationVisibility ma zastosowanie do następujących typów rekordów śledzenia:

  • Activitystaterecord

  • Faultpropagationrecord

  • Cancelrequestedrecord

  • Activityscheduledrecord

Uwaga

Element CustomTrackingRecords emitowany z implementacji działań nie jest filtrowany przez ustawienie implementacji Widoczność.

Funkcjonalność implementationVisibility jest określana zgodnie RootScope z profilem śledzenia w kodzie w następujący sposób:

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

Funkcjonalność implementationVisibility jest określana zgodnie All z profilem śledzenia w pliku konfiguracji w następujący sposób:

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

Ustawienie ImplementationVisibility profilu śledzenia jest opcjonalne. Domyślnie jej wartość jest ustawiona na RootScopewartość . W wartościach tego atrybutu uwzględniana jest również wielkość liter.

Śledzenie typów zapytań profilu

Profile śledzenia mają strukturę jako deklaratywne subskrypcji dla śledzenia rekordy, które umożliwiają zapytania dla rekordów śledzenie wersję wykonawczą przepływu pracy. Istnieje kilka typów zapytań, które umożliwiają subskrybowanie różnych klas TrackingRecord obiektów. Profile śledzenia można określić w konfiguracji lub za pomocą kodu. Oto najbardziej typowe typy zapytań:

  • WorkflowInstanceQuery — Służy do śledzenia zmian cyklu życia wystąpienia przepływu pracy, takich jak pokazane Started wcześniej i Completed. WorkflowInstanceQuery Jest używana do subskrybowania następujących TrackingRecord obiektów:

    Stany, które można subskrybować, są określone w WorkflowInstanceStates klasie .

    Konfiguracja lub kod używany do subskrybowania rekordów śledzenia na poziomie wystąpienia przepływu pracy dla Started stanu wystąpienia przy użyciu WorkflowInstanceQuery elementu jest pokazany w poniższym przykładzie.

    <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states>
            <state name="Started"/>
          </states>
        </workflowInstanceQuery>
    </workflowInstanceQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new WorkflowInstanceQuery()
            {
                States = { WorkflowInstanceStates.Started}
            }
        }
    };
    
  • ActivityStateQuery — Służy do śledzenia zmian cyklu życia działań tworzących wystąpienie przepływu pracy. Na przykład możesz śledzić za każdym razem, gdy działanie "Wyślij wiadomość e-mail" zostanie ukończone w wystąpieniu przepływu pracy. To zapytanie jest niezbędne do TrackingParticipant subskrybowania ActivityStateRecord obiektów. Dostępne stany do zasubskrybowania są określone w .ActivityStates

    Konfiguracja i kod używany do subskrybowania rekordów śledzenia stanu działania, które używają ActivityStateQuery elementu dla SendEmailActivity działania, jest pokazany w poniższym przykładzie.

    <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 }
            }
        }
    };
    

    Uwaga

    Jeśli wiele elementów activityStateQuery ma taką samą nazwę, tylko stany w ostatnim elemendacie są używane w profilu śledzenia.

  • ActivityScheduledQuery — To zapytanie umożliwia śledzenie działania zaplanowanego do wykonania przez działanie nadrzędne. Zapytanie jest niezbędne do TrackingParticipant subskrybowania ActivityScheduledRecord obiektów.

    Konfiguracja i kod używany do subskrybowania rekordów związanych z SendEmailActivity działaniem podrzędnym zaplanowanym przy użyciu elementu ActivityScheduledQuery jest pokazany w poniższym przykładzie.

    <activityScheduledQueries>
      <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </activityScheduledQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityScheduledQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • FaultPropagationQuery — Służy do śledzenia obsługi błędów występujących w ramach działania. Zapytanie jest niezbędne do TrackingParticipant subskrybowania FaultPropagationRecord obiektów.

    Konfiguracja i kod używany do subskrybowania rekordów związanych z propagacją błędów przy użyciu FaultPropagationQuery jest pokazany w poniższym przykładzie.

    <faultPropagationQueries>
      <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" />
    </faultPropagationQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new FaultPropagationQuery()
            {
                FaultSourceActivityName = "SendEmailActivity",
                FaultHandlerActivityName = "NotificationsFaultHandler"
            }
        }
    };
    
  • CancelRequestedQuery — Służy do śledzenia żądań anulowania działania podrzędnego przez działanie nadrzędne. Zapytanie jest niezbędne do TrackingParticipant subskrybowania CancelRequestedRecord obiektów.

    Konfiguracja i kod używany do subskrybowania rekordów związanych z anulowaniem działania przy użyciu CancelRequestedQuery jest pokazany w poniższym przykładzie.

    <cancelRequestedQueries>
      <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </cancelRequestedQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CancelRequestedQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • CustomTrackingQuery — Służy do śledzenia zdarzeń zdefiniowanych w działaniach kodu. Zapytanie jest niezbędne do TrackingParticipant subskrybowania CustomTrackingRecord obiektów.

    Konfiguracja i kod używany do subskrybowania rekordów związanych z niestandardowymi rekordami śledzenia przy użyciu CustomTrackingQuery są pokazane w poniższym przykładzie.

    <customTrackingQueries>
      <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" />
    </customTrackingQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CustomTrackingQuery()
            {
                Name = "EmailAddress",
                ActivityName = "SendEmailActivity"
            }
        }
    };
    
  • BookmarkResumptionQuery — Służy do śledzenia wznowienia zakładki w wystąpieniu przepływu pracy. To zapytanie jest niezbędne do TrackingParticipant subskrybowania BookmarkResumptionRecord obiektów.

    W poniższym przykładzie pokazano konfigurację i kod używany do subskrybowania rekordów związanych z wznowieniem zakładek przy użyciu BookmarkResumptionQuery .

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

Adnotacje

Adnotacje umożliwiają arbitralnie tag śledzenia rekordów o wartości, które mogą być skonfigurowane po czas kompilacji. Na przykład możesz chcieć, aby kilka rekordów śledzenia w kilku przepływach pracy było oznaczonych etykietą "Mail Server" == "Mail Server1". To ułatwia znalezienie wszystkich rekordów z tym znacznikiem podczas wykonywania zapytania rekordów śledzenia później.

W tym celu adnotacja jest dodawana do zapytania śledzenia, jak pokazano w poniższym przykładzie.

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

Jak utworzyć profil śledzenia

Elementy zapytania śledzenia służą do tworzenia profilu śledzenia przy użyciu pliku konfiguracji XML lub kodu programu .NET Framework 4.6.1. Oto przykład profilu śledzenia utworzonego przy użyciu pliku konfiguracji.

<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>

Ostrzeżenie

W przypadku platformy WF korzystającej z hosta usługi Przepływ pracy profil śledzenia jest zwykle tworzony przy użyciu pliku konfiguracji. Istnieje również możliwość utworzenia profilu śledzenia z kodem przy użyciu profilu śledzenia i interfejsu API śledzenia zapytań.

Profil skonfigurowany jako plik konfiguracji XML jest stosowany do uczestnika śledzenia przy użyciu rozszerzenia zachowania. Jest on dodawany do elementu WorkflowServiceHost zgodnie z opisem w dalszej sekcji Konfigurowanie śledzenia przepływu pracy.

Szczegółowość rekordów śledzenia emitowanych przez hosta jest określana przez ustawienia konfiguracji w profilu śledzenia. Uczestnik śledzenia subskrybuje rekordy śledzenia, dodając zapytania do profilu śledzenia. Aby zasubskrybować wszystkie rekordy śledzenia, profil śledzenia musi określić wszystkie zapytania śledzenia przy użyciu "*" w polach nazw w każdym z zapytań.

Oto kilka typowych przykładów profilów śledzenia.

  • Profil śledzenia umożliwiający uzyskanie rekordów i błędów wystąpień przepływu pracy.

    <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>
    
  • Profil śledzenia umożliwiający uzyskanie wszystkich niestandardowych rekordów śledzenia.

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

Zobacz też