Delen via


Aangepaste tracering

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.

Voorbeelddetails

Windows Workflow Foundation (WF) biedt een traceringsinfrastructuur voor het bijhouden van de uitvoering van een werkstroomexemplaren. De trackingruntime implementeert een werkstroomexemplaren om gebeurtenissen te verzenden 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 bijhouden Biedt de infrastructuur voor het verzenden van traceringsrecords.
Deelnemers bijhouden Hiermee worden de traceringsrecords gebruikt. .NET Framework 4 wordt geleverd met een traceringsdeelnemer die traceringsrecords schrijft als ETW-gebeurtenissen (Event Tracing for Windows).
Traceringsprofiel Een filtermechanisme waarmee een traceringsdeelnemer zich kan abonneren op een subset van de traceringsrecords die zijn verzonden vanuit een werkstroomexemplaren.

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

Traceringsrecord Beschrijving
Records voor het bijhouden van werkstroomexemplaren. Beschrijft de levenscyclus van het werkstroomexemplaren. Een exemplaarrecord wordt bijvoorbeeld verzonden wanneer de werkstroom wordt gestart of voltooid.
Records voor het bijhouden van activiteitsstatussen. Details van de uitvoering van 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 verzonden wanneer een bladwijzer in een werkstroomexemplaren wordt hervat.
Aangepaste traceringsrecords. 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.

Aangepaste deelnemer bijhouden

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.

Als u een traceringsdeelnemer wilt schrijven, moet de gebruiker deze implementeren TrackingParticipant. In het bijzonder moet de Track methode worden geïmplementeerd door de aangepaste deelnemer. Deze methode wordt aangeroepen wanneer een wordt TrackingRecord verzonden door de werkstroomruntime.

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 CustomTrackingRecord u objecten verzendt 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