Udostępnij przez


Śledzenie niestandardowe

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 działający w konsoli filtruje TrackingRecord obiekty emitowane przez przepływ pracy przy użyciu obiektu profilu śledzenia, który został utworzony w kodzie.

Przykładowe szczegóły

Windows Workflow Foundation (WF) oferuje infrastrukturę do śledzenia wykonywania instancji przepływu pracy. Środowisko wykonawcze śledzenia implementuje instancję przepływu pracy w celu generowania zdarzeń związanych z cyklem życia przepływu pracy, zdarzeń z działań przepływu pracy oraz niestandardowych zdarzeń śledzenia. W poniższej tabeli przedstawiono podstawowe składniki infrastruktury śledzenia.

Składnik Opis
Śledzenie czasu wykonania Udostępnia infrastrukturę do emitowania rekordów śledzenia.
Śledzenie uczestników Konsumuje rekordy śledzenia. Framework .NET 4 zawiera uczestnika śledzenia, który zapisuje rekordy śledzenia jako zdarzenia Śledzenia zdarzeń systemu Windows (ETW).
Profil śledzenia Mechanizm filtrowania, który umożliwia uczestnikowi procesu śledzenia subskrybowanie określonego zestawu rekordów śledzenia generowanych przez instancję przepływu pracy.

W poniższej tabeli szczegółowo opisano rekordy śledzenia emitowane przez środowisko uruchomieniowe przepływu pracy.

Rekord śledzenia Opis
Rekordy śledzenia wystąpień przepływu pracy. Opisuje cykl życia instancji przepływu pracy. Na przykład rekord wystąpienia jest emitowany po uruchomieniu lub zakończeniu przepływu pracy.
Rekordy śledzenia stanu aktywności. 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.
Niestandardowe zapisy śledzenia. Autor przepływu pracy może utworzyć rekordy śledzenia niestandardowego i emitować je w ramach działania niestandardowego.

Uczestnik śledzenia subskrybuje podzbiór 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 metoda Track musi zostać zaimplementowana przez niestandardowego uczestnika. 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. Przykład kodu poniżej to metoda Track dla niestandardowego uczestnika śledzenia.

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

}

Oto kod przykładowy, który dodaje konsolowego uczestnika do wywoływacza 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 niestandardowych rekordów śledzenia

W tym przykładzie również pokazano możliwość emitowania obiektów CustomTrackingRecord z niestandardowej aktywności workflowu.

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 skorzystać z tego przykładu

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

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

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

Zobacz także