Dela via


Spårningsprofiler

Spårningsprofiler innehåller spårningsfrågor som gör det möjligt för en spårningsdeltagare att prenumerera på arbetsflödeshändelser som genereras när tillståndet för en arbetsflödesinstans ändras vid körning.

Spårningsprofiler

Spårningsprofiler används för att ange vilken spårningsinformation som genereras för en arbetsflödesinstans. Om ingen profil har angetts genereras alla spårningshändelser. Om en profil anges genereras de spårningshändelser som anges i profilen. Beroende på dina övervakningskrav kan du skriva en profil som är mycket allmän, som prenumererar på en liten uppsättning ändringar på hög nivå i ett arbetsflöde. Däremot kan du skapa en mycket detaljerad profil vars resulterande händelser är tillräckligt omfattande för att rekonstruera ett detaljerat körningsflöde senare.

Spårningsprofiler visas som XML-element i en standardkonfigurationsfil för .NET Framework eller anges i kod. Följande exempel är en spårningsprofil för .NET Framework 4.6.1 i en konfigurationsfil som gör att en spårningsdeltagare kan prenumerera på Started händelserna och Completed arbetsflödet.

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

I följande exempel visas motsvarande spårningsprofil som skapats med hjälp av kod.

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

Spårningsposter filtreras genom synlighetsläget i en spårningsprofil med hjälp av attributet ImplementationVisibility . En sammansatt aktivitet är en aktivitet på den översta nivån som innehåller andra aktiviteter som utgör dess implementering. Synlighetsläget anger spårningsposter som genereras från sammansatta aktiviteter i en arbetsflödesaktivitet för att ange om aktiviteter som utgör implementeringen spåras. Synlighetsläget gäller på profilnivå för spårning. Filtrering av spårningsposter för enskilda aktiviteter i ett arbetsflöde styrs av frågorna i spårningsprofilen. Mer information finns i avsnittet Spårningsprofilfrågetyper i det här dokumentet.

De två synlighetslägen som anges av implementationVisibility attributet i spårningsprofilen är RootScope och All. RootScope Om du använder läget ignoreras spårningsposterna för aktiviteter som utgör implementeringen av en aktivitet om en sammansatt aktivitet inte är roten i ett arbetsflöde. Detta innebär att när en aktivitet som implementeras med hjälp av andra aktiviteter läggs till i ett arbetsflöde, och implementationVisibility uppsättningen till RootScope, spåras endast aktiviteten på den översta nivån inom den sammansatta aktiviteten. Om en aktivitet är roten till arbetsflödet är implementeringen av aktiviteten själva arbetsflödet och spårningsposter genereras för aktiviteter som utgör implementeringen. Om du använder läget Alla kan alla spårningsposter genereras för rotaktiviteten och alla dess sammansatta aktiviteter.

Anta till exempel att MyActivity är en sammansatt aktivitet vars implementering innehåller två aktiviteter, Activity1 och Activity2. När den här aktiviteten läggs till i ett arbetsflöde och spårning aktiveras med en spårningsprofil med implementationVisibility inställd på RootScopegenereras spårningsposter endast för MyActivity. Inga poster genereras dock för aktiviteterna Activity1 och Activity2.

Men om implementationVisibility attributet för spårningsprofilen är inställt på Allgenereras spårningsposter inte bara för MyActivity, utan även för aktiviteterna Activity1 och Activity2.

Flaggan implementationVisibility gäller för följande typer av spårningsposter:

  • ActivityStateRecord

  • FaultPropagationRecord

  • CancelRequestedRecord

  • ActivityScheduledRecord

Kommentar

CustomTrackingRecords som genereras från aktivitetsimplementeringen filtreras inte bort av implementeringsinställningenVisibility.

Funktionen implementationVisibility anges som RootScope på spårningsprofilen i koden enligt följande:

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

Funktionen implementationVisibility anges som All på spårningsprofilen i en konfigurationsfil enligt följande:

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

Inställningen ImplementationVisibility för spårningsprofilen är valfri. Som standard är dess värde inställt på RootScope. Värdena för det här attributet är också skiftlägeskänsliga.

Frågetyper för spårningsprofil

Spårningsprofiler är strukturerade som deklarativa prenumerationer för spårning av poster som gör att du kan köra frågor mot arbetsflödeskörningen för specifika spårningsposter. Det finns flera frågetyper som gör att du kan prenumerera på olika objektklasser TrackingRecord . Spårningsprofiler kan anges i konfigurationen eller via kod. Här är de vanligaste frågetyperna:

  • WorkflowInstanceQuery – Använd detta för att spåra arbetsflödesinstansens livscykeländringar som tidigare demonstrerade Started och Completed. WorkflowInstanceQuery Används för att prenumerera på följande TrackingRecord objekt:

    De tillstånd som kan prenumereras på anges i WorkflowInstanceStates klassen .

    Den konfiguration eller kod som används för att prenumerera på spårningsposter på arbetsflödesinstansnivå för Started instanstillståndet WorkflowInstanceQuery med hjälp av visas i följande exempel.

    <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states>
            <state name="Started"/>
          </states>
        </workflowInstanceQuery>
    </workflowInstanceQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new WorkflowInstanceQuery()
            {
                States = { WorkflowInstanceStates.Started}
            }
        }
    };
    
  • ActivityStateQuery – Använd detta för att spåra livscykeländringar för aktiviteter som utgör en arbetsflödesinstans. Du kanske till exempel vill hålla reda på varje gång aktiviteten "Skicka e-post" slutförs i en arbetsflödesinstans. Den här frågan är nödvändig för att en TrackingParticipant ska kunna prenumerera på ActivityStateRecord objekt. Tillgängliga tillstånd att prenumerera på anges i ActivityStates.

    Konfigurationen och koden som används för att prenumerera på aktivitetstillståndsspårningsposter som använder ActivityStateQuery för SendEmailActivity aktiviteten visas i följande exempel.

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

    Kommentar

    Om flera activityStateQuery-element har samma namn används endast tillstånden i det sista elementet i spårningsprofilen.

  • ActivityScheduledQuery – Med den här frågan kan du spåra en aktivitet som är schemalagd för körning av en överordnad aktivitet. Frågan är nödvändig för att en TrackingParticipant ska kunna prenumerera på ActivityScheduledRecord objekt.

    Konfigurationen och koden som används för att prenumerera på poster relaterade till den SendEmailActivity underordnade aktiviteten som schemaläggs med hjälp av ActivityScheduledQuery visas i följande exempel.

    <activityScheduledQueries>
      <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </activityScheduledQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityScheduledQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • FaultPropagationQuery – Använd detta för att spåra hanteringen av fel som inträffar inom en aktivitet. Frågan är nödvändig för att en TrackingParticipant ska kunna prenumerera på FaultPropagationRecord objekt.

    Konfigurationen och koden som används för att prenumerera på poster som rör felspridning med hjälp av FaultPropagationQuery visas i följande exempel.

    <faultPropagationQueries>
      <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" />
    </faultPropagationQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new FaultPropagationQuery()
            {
                FaultSourceActivityName = "SendEmailActivity",
                FaultHandlerActivityName = "NotificationsFaultHandler"
            }
        }
    };
    
  • CancelRequestedQuery – Använd det här alternativet för att spåra begäranden om att avbryta en underordnad aktivitet av den överordnade aktiviteten. Frågan är nödvändig för att en TrackingParticipant ska kunna prenumerera på CancelRequestedRecord objekt.

    Konfigurationen och koden som används för att prenumerera på poster som rör aktivitetsavbokning med hjälp av CancelRequestedQuery visas i följande exempel.

    <cancelRequestedQueries>
      <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </cancelRequestedQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CancelRequestedQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • CustomTrackingQuery – Använd detta för att spåra händelser som du definierar i dina kodaktiviteter. Frågan är nödvändig för att en TrackingParticipant ska kunna prenumerera på CustomTrackingRecord objekt.

    Konfigurationen och koden som används för att prenumerera på poster relaterade till anpassade spårningsposter med hjälp av CustomTrackingQuery visas i följande exempel.

    <customTrackingQueries>
      <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" />
    </customTrackingQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CustomTrackingQuery()
            {
                Name = "EmailAddress",
                ActivityName = "SendEmailActivity"
            }
        }
    };
    
  • BookmarkResumptionQuery – Använd detta för att spåra återupptagandet av ett bokmärke i en arbetsflödesinstans. Den här frågan är nödvändig för att en TrackingParticipant ska kunna prenumerera på BookmarkResumptionRecord objekt.

    Konfigurationen och koden som används för att prenumerera på poster som rör återupptagande av bokmärken med hjälp av BookmarkResumptionQuery visas i följande exempel.

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

Kommentarer

Med anteckningar kan du godtyckligt tagga spårningsposter med ett värde som kan konfigureras efter byggtiden. Du kanske till exempel vill att flera spårningsposter i flera arbetsflöden ska taggas med "Mail Server" == "Mail Server1". Det gör det enkelt att hitta alla poster med den här taggen när du frågar efter spårningsposter senare.

För att åstadkomma detta läggs en anteckning till i en spårningsfråga enligt följande exempel.

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

Skapa en spårningsprofil

Spårning av frågeelement används för att skapa en spårningsprofil med hjälp av antingen en XML-konfigurationsfil eller .NET Framework 4.6.1-kod. Här är ett exempel på en spårningsprofil som skapats med hjälp av en konfigurationsfil.

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

Varning

För en WF med hjälp av arbetsflödestjänstvärden skapas spårningsprofilen vanligtvis med hjälp av en konfigurationsfil. Det är också möjligt att skapa en spårningsprofil med kod med hjälp av spårningsprofilen och spårningsfrågans API.

En profil som konfigurerats som en XML-konfigurationsfil tillämpas på en spårningsdeltagare med hjälp av ett beteendetillägg. Detta läggs till i en WorkflowServiceHost enligt beskrivningen i det senare avsnittet Konfigurera spårning för ett arbetsflöde.

Utförligheten i spårningsposterna som genereras av värden bestäms av konfigurationsinställningarna i spårningsprofilen. En spårningsdeltagare prenumererar på spårningsposter genom att lägga till frågor i en spårningsprofil. Om du vill prenumerera på alla spårningsposter måste spårningsprofilen ange alla spårningsfrågor med hjälp av "*" i namnfälten i var och en av frågorna.

Här är några av de vanligaste exemplen på spårningsprofiler.

  • En spårningsprofil för att hämta arbetsflödesinstansposter och fel.

    <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>
    
  • En spårningsprofil för att hämta alla anpassade spårningsposter.

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

Se även