Udostępnij za pośrednictwem


Niestandardowe śledzenie

W przykładzie CustomTracking pokazano, jak utworzyć niestandardowego uczestnika śledzenia i zapisać zawartość danych śledzenia w konsoli. Ponadto w przykładzie pokazano, jak emitować CustomTrackingRecord obiekty wypełnione danymi zdefiniowanymi przez użytkownika. Uczestnik śledzenia oparty na konsoli filtruje TrackingRecord obiekty emitowane przez przepływ pracy przy użyciu obiektu profilu śledzenia utworzonego w kodzie.

Przykładowe szczegóły

Program Windows Workflow Foundation (WF) udostępnia infrastrukturę śledzenia do śledzenia wykonywania wystąpienia przepływu pracy. Środowisko uruchomieniowe śledzenia implementuje wystąpienie przepływu pracy w celu emitowania zdarzeń związanych z cyklem życia przepływu pracy, zdarzeniami z działań przepływu pracy i niestandardowymi zdarzeniami śledzenia. W poniższej tabeli przedstawiono podstawowe składniki infrastruktury śledzenia.

Składnik opis
Śledzenie środowiska uruchomieniowego Udostępnia infrastrukturę do emitowania rekordów śledzenia.
Śledzenie uczestników Używa rekordów śledzenia. Program .NET Framework 4 jest dostarczany z uczestnikiem śledzenia, który zapisuje rekordy śledzenia jako zdarzenia śledzenia zdarzeń systemu Windows (ETW).
Profil śledzenia Mechanizm filtrowania, który umożliwia uczestnikowi śledzenia subskrybowanie podzestawu rekordów śledzenia emitowanych z wystąpienia przepływu pracy.

W poniższej tabeli przedstawiono szczegółowe informacje o rekordach śledzenia emitujących przez środowisko uruchomieniowe przepływu pracy.

Rekord śledzenia opis
Rekordy śledzenia wystąpień przepływu pracy. Opisuje cykl życia wystąpienia przepływu pracy. Na przykład rekord wystąpienia jest emitowany po uruchomieniu lub zakończeniu przepływu pracy.
Rekordy śledzenia stanu działania. Szczegóły wykonania działania. Te rekordy wskazują stan działania przepływu pracy, na przykład gdy działanie jest zaplanowane lub gdy działanie zostanie zakończone lub gdy zostanie zgłoszony błąd.
Rekord wznowienia zakładki. Emitowane za każdym razem, gdy zakładka w wystąpieniu przepływu pracy zostanie wznowiona.
Rekordy śledzenia niestandardowego. Autor przepływu pracy może utworzyć rekordy śledzenia niestandardowego i emitować je w ramach działania niestandardowego.

Uczestnik śledzenia subskrybuuje podzestaw emitowanych TrackingRecord obiektów przy użyciu profilów śledzenia. Profil śledzenia zawiera zapytania śledzenia, które umożliwiają subskrybowanie określonego typu rekordu śledzenia. Profile śledzenia można określić w kodzie lub w konfiguracji.

Niestandardowy uczestnik śledzenia

Interfejs API uczestnika śledzenia umożliwia rozszerzenie środowiska uruchomieniowego śledzenia za pomocą uczestnika śledzenia udostępnianego przez użytkownika, który może obejmować niestandardową logikę do obsługi TrackingRecord obiektów emitowanych przez środowisko uruchomieniowe przepływu pracy.

Aby napisać uczestnika śledzenia, użytkownik musi zaimplementować TrackingParticipantelement . W szczególności Track metoda musi zostać zaimplementowana przez uczestnika niestandardowego. Ta metoda jest wywoływana, gdy element TrackingRecord jest emitowany przez środowisko uruchomieniowe przepływu pracy.

public abstract class TrackingParticipant
{
    protected TrackingParticipant();

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

Kompletny uczestnik śledzenia jest implementowany w pliku ConsoleTrackingParticipant.cs. Poniższy przykład kodu to Track metoda dla uczestnika śledzenia niestandardowego.

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

}

Poniższy przykładowy kod dodaje uczestnika konsoli do wywołania przepływu pracy.

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

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

Emitowanie rekordów śledzenia niestandardowego

W tym przykładzie pokazano również możliwość emitowania CustomTrackingRecord obiektów z niestandardowego działania przepływu pracy:

W poniższym przykładzie pokazano, jak emitować CustomTrackingRecord obiekty w ramach działania niestandardowego.

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

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

Aby użyć tego przykładu

  1. Za pomocą programu Visual Studio otwórz plik rozwiązania CustomTrackingSample.sln.

  2. Aby skompilować rozwiązanie, naciśnij klawisze CTRL+SHIFT+B.

  3. Aby uruchomić rozwiązanie, naciśnij klawisze CTRL+F5.

Zobacz też