Anpassad spårning

CustomTracking-exemplet visar hur du skapar en anpassad spårningsdeltagare och skriver innehållet i spårningsdata till konsolen. Dessutom visar exemplet hur man kan sända CustomTrackingRecord-objekt som fyllts med användardefinierade data. Den konsolbaserade spårningsdeltagaren filtrerar de TrackingRecord objekt som genereras av arbetsflödet med hjälp av ett spårningsprofilobjekt som skapats i kod.

Exempelinformation

Windows Workflow Foundation (WF) tillhandahåller en spårningsinfrastruktur för att spåra körningen av en arbetsflödesinstans. Spårningskörningen implementerar en arbetsflödesinstans för att generera händelser relaterade till arbetsflödets livscykel, händelser från arbetsflödesaktiviteter och anpassade spårningshändelser. I följande tabell beskrivs de primära komponenterna i spårningsinfrastrukturen.

Komponent Beskrivning
Spåra körningstid Tillhandahåller infrastrukturen för att skapa spårningsregister.
Spåra deltagare Hanterar spårningsloggarna. .NET Framework 4 levereras med en spårningsdeltagare som skriver spårningsposter som Event Tracing for Windows (ETW)-händelser.
Spårningsprofil En filtreringsmekanism som gör att en spårningsdeltagare kan prenumerera på en delmängd av spårningsposterna som genereras från en arbetsflödesinstans.

I följande tabell beskrivs spårningsposterna som arbetsflödeskörningen genererar.

Spårningsjournal Beskrivning
Spåruppgifter för arbetsflödesinstans. Beskriver livscykeln för arbetsflödesinstansen. Till exempel genereras en instanspost när arbetsflödet startar eller slutförs.
Aktivitetsstatusspårningsregister. ** Detaljer om aktivitetsutförande. Dessa poster anger tillståndet för en arbetsflödesaktivitet, till exempel när en aktivitet schemaläggs eller när aktiviteten slutförs eller när ett fel utlöses.
Återupptagningspost för bokmärken. Genereras när ett bokmärke i en arbetsflödesinstans återupptas.
Anpassade spårningsregister. En arbetsflödesförfattare kan skapa anpassade spårningsposter och generera dem inom den anpassade aktiviteten.

Spårningsdeltagaren prenumererar på en delmängd av de utgivna TrackingRecord objekten med hjälp av spårningsprofiler. En spårningsprofil innehåller spårningsfrågor som tillåter prenumerera på en specifik typ av spårningsposttyp. Spårningsprofiler kan anges i kod eller i konfigurationen.

Anpassad spårningsdeltagare

API:et för spårningsdeltagare möjliggör utökning av spårningskörningen med en användardefinierad spårningsdeltagare som kan innehålla anpassad logik för att hantera TrackingRecord-objekt som genereras av arbetsflödeskörningen.

Om du vill skriva en spårningsdeltagare måste användaren implementera TrackingParticipant. Track Mer specifikt måste metoden implementeras av den anpassade deltagaren. Den här metoden anropas när en TrackingRecord genereras av arbetsflödesmiljön.

public abstract class TrackingParticipant
{
    protected TrackingParticipant();

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

Den kompletta spårningsdeltagaren implementeras i filen ConsoleTrackingParticipant.cs. Följande kodexempel är Track metoden för den anpassade spårningsdeltagaren.

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();

}

I följande kodexempel läggs konsoldeltagaren till i arbetsflödets anropare.

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

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

Generera anpassade spårningsposter

Det här exemplet visar också möjligheten att generera CustomTrackingRecord objekt från en anpassad arbetsflödesaktivitet:

I följande exempel visas hur du genererar CustomTrackingRecord objekt inom en anpassad aktivitet.

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

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

Så här använder du det här exemplet

  1. Använd Visual Studio och öppna CustomTrackingSample.sln lösningsfilen.

  2. Tryck på CTRL+SKIFT+B för att skapa lösningen.

  3. Om du vill köra lösningen trycker du på CTRL+F5.

Se även