Delen via


Aangepaste tracking

Het CustomTracking-voorbeeld laat zien hoe u een aangepaste traceringsdeelnemer maakt en de inhoud van de traceringsgegevens naar de console schrijft. Daarnaast ziet u in het voorbeeld hoe u objecten verzendt CustomTrackingRecord die zijn gevuld met door de gebruiker gedefinieerde gegevens. De op de console gebaseerde traceringsdeelnemer filtert de TrackingRecord objecten die door de werkstroom worden verzonden met behulp van een traceringsprofielobject dat in code is gemaakt.

Voorbeeldgegevens

Windows Workflow Foundation (WF) biedt een traceringsinfrastructuur om de uitvoering van een werkstroomexemplaar bij te houden. De tracking-runtime implementeert een werkstroomexemplaar om gebeurtenissen uit te zenden die betrekking hebben op de levenscyclus van de werkstroom, gebeurtenissen van werkstroomactiviteiten en aangepaste tracking-gebeurtenissen. De volgende tabel bevat informatie over de primaire onderdelen van de traceringsinfrastructuur.

Onderdeel Beschrijving
Runtime monitoren Biedt de infrastructuur voor het verzenden van traceringsrecords.
Deelnemers bijhouden Hiermee worden de traceringsrecords gebruikt. .NET Framework 4 wordt geleverd met een traceerparticipant die traceringsrecords schrijft als ETW-gebeurtenissen (Event Tracing voor Windows).
Traceringsprofiel Een filtermechanisme waarmee een traceringsdeelnemer zich kan abonneren op een subsectie van de traceringsrecords die afkomstig zijn van een werkstroominstantie.

De volgende tabel bevat informatie over de traceringsrecords die door de werkstroomruntime worden verzonden.

Traceringsrecord Beschrijving
Registraties voor het bijhouden van werkstroominstanties. Beschrijft de levenscyclus van de werkstroominstantie. Bijvoorbeeld, een exemplaarrecord wordt verzonden wanneer de werkstroom start of voltooid is.
Records voor het bijhouden van activiteitsstatussen. Details van de uitvoering van de activiteit. Deze records geven de status van een werkstroomactiviteit aan, zoals wanneer een activiteit wordt gepland of wanneer de activiteit is voltooid of wanneer er een fout optreedt.
Record voor hervatting van bladwijzers. Wordt gegenereerd wanneer een bladwijzer in een werkstroominstantie wordt hervat.
Aangepaste bijhoudingsrecords. Een auteur van een werkstroom kan aangepaste traceringsrecords maken en deze verzenden binnen de aangepaste activiteit.

De traceringsdeelnemer abonneert zich op een subset van de verzonden TrackingRecord objecten met behulp van traceringsprofielen. Een traceringsprofiel bevat traceringsquery's waarmee u zich kunt abonneren op een bepaald traceringsrecordtype. Traceringsprofielen kunnen worden opgegeven in code of in configuratie.

Deelnemer voor aangepast volgen

Met de API van de traceringsdeelnemer kan de runtime voor tracering worden uitgebreid met een door de gebruiker verstrekte traceringsdeelnemer die aangepaste logica kan bevatten voor het verwerken TrackingRecord van objecten die door de werkstroomruntime worden verzonden.

Om een traceringsdeelnemer te schrijven, moet de gebruiker TrackingParticipant implementeren. Specifiek moet de Track methode worden geïmplementeerd door de aangepaste partij. Deze methode wordt aangeroepen wanneer een TrackingRecord door de werkstroomruntime wordt uitgezonden.

public abstract class TrackingParticipant
{
    protected TrackingParticipant();

    public virtual TrackingProfile TrackingProfile { get; set; }
    public abstract void Track(TrackingRecord record, TimeSpan timeout);
}

De volledige traceringsdeelnemer wordt geïmplementeerd in het ConsoleTrackingParticipant.cs-bestand. Het volgende codevoorbeeld is de Track methode voor de aangepaste traceringsdeelnemer.

protected override void Track(TrackingRecord record, TimeSpan timeout)
{
    ...
    WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
    if (workflowInstanceRecord != null)
    {
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
            " Workflow InstanceID: {0} Workflow instance state: {1}",
            record.InstanceId, workflowInstanceRecord.State));
    }

    ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
    if (activityStateRecord != null)
    {
        IDictionary<String, object> variables = activityStateRecord.Variables;
        StringBuilder vars = new StringBuilder();

        if (variables.Count > 0)
        {
            vars.AppendLine("\n\tVariables:");
            foreach (KeyValuePair<string, object> variable in variables)
            {
                vars.AppendLine(String.Format(
                    "\t\tName: {0} Value: {1}", variable.Key, variable.Value));
            }
        }
        Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
            " :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
                activityStateRecord.Activity.Name, activityStateRecord.State,
            ((variables.Count > 0) ? vars.ToString() : String.Empty)));
    }

    CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

    if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
    {
        ...
    }
    Console.WriteLine();

}

In het volgende codevoorbeeld wordt de consoledeelnemer toegevoegd aan de aanroeper van de werkstroom.

ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
    ...
    // The tracking profile is set here, refer to Program.CS
...
}

WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);

Aangepaste traceringsrecords verzenden

In dit voorbeeld ziet u ook de mogelijkheid om objecten uit een aangepaste werkstroomactiviteit te verzenden CustomTrackingRecord :

In het volgende voorbeeld ziet u hoe u CustomTrackingRecord-objecten afgeeft binnen een aangepaste activiteit.

// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
    Data =
    {
        {"OrderId", 200},
        {"OrderDate", "20 Aug 2001"}
    }
};

// Emit custom tracking record
context.Track(customRecord);

Dit voorbeeld gebruiken

  1. Open met Visual Studio het CustomTrackingSample.sln-oplossingsbestand.

  2. Druk op Ctrl+Shift+B om de oplossing te bouwen.

  3. Druk op Ctrl+F5 om de oplossing uit te voeren.

Zie ook