Delen via


Traceringsprofielen

Traceringsprofielen bevatten traceringsquery's waarmee een deelnemer zich kan abonneren op werkstroomevenementen die worden verzonden wanneer de status van een werkstroomexemplaren tijdens runtime verandert.

Traceringsprofielen

Traceringsprofielen worden gebruikt om op te geven welke traceringsgegevens worden verzonden voor een werkstroomexemplaren. Als er geen profiel is opgegeven, worden alle traceringsevenementen verzonden. Als er een profiel is opgegeven, worden de traceringsevenementen die in het profiel zijn opgegeven, verzonden. Afhankelijk van uw bewakingsvereisten kunt u een profiel schrijven dat zeer algemeen is, waardoor u zich abonneert op een kleine set statuswijzigingen op hoog niveau in een werkstroom. Omgekeerd kunt u een zeer gedetailleerd profiel maken waarvan de resulterende gebeurtenissen rijk genoeg zijn om later een gedetailleerde uitvoeringsstroom te reconstrueren.

Traceringsprofielen worden weergegeven als XML-elementen in een standaard .NET Framework-configuratiebestand of opgegeven in code. Het volgende voorbeeld is van een .NET Framework 4.6.1-traceringsprofiel in een configuratiebestand waarmee een deelnemer zich kan abonneren op de Started gebeurtenissen en Completed werkstromen.

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

In het volgende voorbeeld ziet u het equivalente traceringsprofiel dat is gemaakt met behulp van code.

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

Traceringsrecords worden gefilterd via de zichtbaarheidsmodus binnen een traceringsprofiel met behulp van het ImplementationVisibility kenmerk. Een samengestelde activiteit is een activiteit op het hoogste niveau die andere activiteiten bevat die de implementatie vormen. In de zichtbaarheidsmodus worden de traceringsrecords opgegeven die worden verzonden uit samengestelde activiteiten binnen een werkstroomactiviteit, om op te geven of activiteiten die de implementatie vormen, worden bijgehouden. De zichtbaarheidsmodus is van toepassing op het niveau van het traceringsprofiel. Het filteren van traceringsrecords voor afzonderlijke activiteiten binnen een werkstroom wordt beheerd door de query's in het traceringsprofiel. Zie de sectie Traceringsprofielquerytypen in dit document voor meer informatie.

De twee zichtbaarheidsmodi die zijn opgegeven door het implementationVisibility kenmerk in het traceringsprofiel zijn RootScope en All. Als u de RootScope modus gebruikt, worden de traceringsrecords onderdrukt voor activiteiten die de implementatie van een activiteit vormen in het geval dat een samengestelde activiteit niet de hoofdmap van een werkstroom is. Dit impliceert dat wanneer een activiteit die wordt geïmplementeerd met andere activiteiten wordt toegevoegd aan een werkstroom en de implementationVisibility set op RootScope, alleen de activiteit op het hoogste niveau binnen die samengestelde activiteit wordt bijgehouden. Als een activiteit de hoofdmap van de werkstroom is, is de implementatie van de activiteit zelf de werkstroom en worden traceringsrecords verzonden voor activiteiten die de implementatie vormen. Met de modus Alle kunnen alle traceringsrecords worden verzonden voor de hoofdactiviteit en alle samengestelde activiteiten.

Stel dat MyActivity een samengestelde activiteit is waarvan de implementatie twee activiteiten, Activiteit1 en Activiteit2 bevat. Wanneer deze activiteit wordt toegevoegd aan een werkstroom en bijhouden is ingeschakeld met een traceringsprofiel met implementationVisibility de instelling RootScope, worden traceringsrecords alleen verzonden voor MyActivity. Er worden echter geen records verzonden voor activiteiten Activiteit1 en Activiteit2.

Als het implementationVisibility kenmerk voor het traceringsprofiel echter is ingesteld Allop , worden traceringsrecords niet alleen verzonden voor MyActivity, maar ook voor activiteiten Activiteit1 en Activiteit2.

De implementationVisibility vlag is van toepassing op de volgende traceringsrecordtypen:

  • ActivityStateRecord

  • FaultPropagationRecord

  • CancelRequestedRecord

  • ActivityScheduledRecord

Notitie

CustomTrackingRecords die worden verzonden door de implementatie van activiteiten, worden niet gefilterd door de instelling implementationVisibility.

De implementationVisibility functionaliteit wordt als volgt opgegeven in RootScope het traceringsprofiel in code:

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

De implementationVisibility functionaliteit wordt als volgt opgegeven voor All het traceringsprofiel in een configuratiebestand:

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

De ImplementationVisibility instelling voor het traceringsprofiel is optioneel. De waarde is standaard ingesteld op RootScope. De waarden voor dit kenmerk zijn ook hoofdlettergevoelig.

Profielquerytypen bijhouden

Trackingprofielen zijn gestructureerd als declaratieve abonnementen voor het bijhouden van records waarmee u query's kunt uitvoeren op de werkstroomruntime voor specifieke traceringsrecords. Er zijn verschillende querytypen waarmee u zich kunt abonneren op verschillende klassen TrackingRecord objecten. Traceringsprofielen kunnen worden opgegeven in de configuratie of via code. Dit zijn de meest voorkomende querytypen:

  • WorkflowInstanceQuery - Gebruik dit om de levenscyclus van het werkstroomexemplaren bij te houden, zoals de eerder gedemonstreerde Started en Completed. Deze WorkflowInstanceQuery wordt gebruikt om u te abonneren op de volgende TrackingRecord objecten:

    De statussen waarop u zich kunt abonneren, worden opgegeven in de WorkflowInstanceStates klasse.

    De configuratie of code die wordt gebruikt om u te abonneren op traceringsrecords op werkstroomexemplaren voor de Started instantiestatus, wordt WorkflowInstanceQuery in het volgende voorbeeld weergegeven.

    <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states>
            <state name="Started"/>
          </states>
        </workflowInstanceQuery>
    </workflowInstanceQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new WorkflowInstanceQuery()
            {
                States = { WorkflowInstanceStates.Started}
            }
        }
    };
    
  • ActivityStateQuery - Gebruik dit om wijzigingen in de levenscyclus bij te houden van de activiteiten waaruit een werkstroomexemplaren bestaan. U kunt bijvoorbeeld elke keer dat de activiteit E-mail verzenden is voltooid, bijhouden in een werkstroomexemplaren. Deze query is nodig voor een TrackingParticipant abonnement op ActivityStateRecord objecten. De beschikbare statussen waarop u zich wilt abonneren, worden opgegeven in ActivityStates.

    De configuratie en code die wordt gebruikt voor het bijhouden van activiteitenstatusrecords die gebruikmaken van de ActivityStateQuerySendEmailActivity activiteit, worden weergegeven in het volgende voorbeeld.

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

    Notitie

    Als meerdere activityStateQuery-elementen dezelfde naam hebben, worden alleen de statussen in het laatste element gebruikt in het traceringsprofiel.

  • ActivityScheduledQuery - Met deze query kunt u een activiteit bijhouden die is gepland voor uitvoering door een bovenliggende activiteit. De query is nodig voor een TrackingParticipant abonnement op ActivityScheduledRecord objecten.

    De configuratie en code die wordt gebruikt om u te abonneren op records met betrekking tot de SendEmailActivity onderliggende activiteit die wordt gepland met behulp van de code ActivityScheduledQuery , wordt weergegeven in het volgende voorbeeld.

    <activityScheduledQueries>
      <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </activityScheduledQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityScheduledQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • FaultPropagationQuery - Gebruik dit om de verwerking van fouten bij te houden die zich voordoen binnen een activiteit. De query is nodig voor een TrackingParticipant abonnement op FaultPropagationRecord objecten.

    De configuratie en code die wordt gebruikt om u te abonneren op records met betrekking tot foutdoorgifte, FaultPropagationQuery wordt weergegeven in het volgende voorbeeld.

    <faultPropagationQueries>
      <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" />
    </faultPropagationQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new FaultPropagationQuery()
            {
                FaultSourceActivityName = "SendEmailActivity",
                FaultHandlerActivityName = "NotificationsFaultHandler"
            }
        }
    };
    
  • CancelRequestedQuery - Gebruik dit om aanvragen bij te houden om een onderliggende activiteit te annuleren door de bovenliggende activiteit. De query is nodig voor een TrackingParticipant abonnement op CancelRequestedRecord objecten.

    De configuratie en code die wordt gebruikt om u te abonneren op records met betrekking tot het annuleren van CancelRequestedQuery activiteiten, wordt weergegeven in het volgende voorbeeld.

    <cancelRequestedQueries>
      <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </cancelRequestedQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CancelRequestedQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • CustomTrackingQuery - Gebruik dit om gebeurtenissen bij te houden die u in uw codeactiviteiten definieert. De query is nodig voor een TrackingParticipant abonnement op CustomTrackingRecord objecten.

    De configuratie en code die wordt gebruikt om u te abonneren op records met betrekking tot aangepaste traceringsrecords, CustomTrackingQuery wordt weergegeven in het volgende voorbeeld.

    <customTrackingQueries>
      <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" />
    </customTrackingQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CustomTrackingQuery()
            {
                Name = "EmailAddress",
                ActivityName = "SendEmailActivity"
            }
        }
    };
    
  • BookmarkResumptionQuery - Gebruik dit om hervatting van een bladwijzer in een werkstroomexemplaar bij te houden. Deze query is nodig voor een TrackingParticipant abonnement op BookmarkResumptionRecord objecten.

    De configuratie en code die wordt gebruikt om u te abonneren op records met betrekking tot het hervatten van bladwijzers, BookmarkResumptionQuery wordt weergegeven in het volgende voorbeeld.

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

Aantekeningen

Met aantekeningen kunt u willekeurig records taggen met een waarde die na de buildtijd kan worden geconfigureerd. U wilt bijvoorbeeld dat meerdere traceringsrecords in verschillende werkstromen worden gelabeld met 'Mail Server' == 'Mail Server1'. Hierdoor kunt u gemakkelijk alle records met deze tag vinden wanneer u later query's uitvoert op het bijhouden van records.

Hiervoor wordt een aantekening toegevoegd aan een traceringsquery, zoals wordt weergegeven in het volgende voorbeeld.

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

Een traceringsprofiel maken

Bijhouden van query-elementen wordt gebruikt om een traceringsprofiel te maken met behulp van een XML-configuratiebestand of .NET Framework 4.6.1-code. Hier volgt een voorbeeld van een traceringsprofiel dat is gemaakt met behulp van een configuratiebestand.

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

Waarschuwing

Voor een WF met behulp van de werkstroomservicehost wordt het traceringsprofiel meestal gemaakt met behulp van een configuratiebestand. Het is ook mogelijk om een traceringsprofiel met code te maken met behulp van het traceringsprofiel en de api voor het bijhouden van query's.

Een profiel dat is geconfigureerd als een XML-configuratiebestand, wordt toegepast op een traceringsdeelnemer met behulp van een gedragsextensie. Dit wordt toegevoegd aan een WorkflowServiceHost, zoals beschreven in de latere sectie Tracering configureren voor een werkstroom.

De uitgebreidheid van de traceringsrecords die door de host worden verzonden, wordt bepaald door configuratie-instellingen binnen het traceringsprofiel. Een traceringsdeelnemer abonneert zich op het bijhouden van records door query's toe te voegen aan een traceringsprofiel. Als u zich wilt abonneren op alle traceringsrecords, moet het traceringsprofiel alle traceringsquery's opgeven met '*' in de naamvelden in elk van de query's.

Hier volgen enkele veelvoorkomende voorbeelden van traceringsprofielen.

  • Een traceringsprofiel voor het verkrijgen van records en fouten in het werkstroomexemplaren.

    <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>
    
  • Een traceringsprofiel om alle aangepaste traceringsrecords te verkrijgen.

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

Zie ook