Поделиться через


Настраиваемое отслеживание

В примере CustomTracking показано, как создать участника пользовательского отслеживания и записать содержимое данных отслеживания в консоль. Помимо этого, в образце демонстрируется создание CustomTrackingRecord объектов, заполненных определенными пользователем данными. Консольный участник отслеживания фильтрует TrackingRecord объекты, выпущенные рабочим процессом, используя объект профиля отслеживания, созданный в коде.

Подробные сведения об образце

Windows Workflow Foundation (WF) предоставляет инфраструктуру отслеживания для отслеживания выполнения экземпляра рабочего процесса. Среда выполнения для отслеживания реализует экземпляр рабочего процесса для создания событий, связанных с жизненным циклом рабочего процесса, действиями рабочего процесса и настраиваемыми событиями отслеживания. В следующих сведениях о таблице подробно описаны основные компоненты инфраструктуры отслеживания.

Компонент Description
Среда выполнения отслеживания Предоставляет инфраструктуру для передачи записей отслеживания.
Участники отслеживания Потребляет записи отслеживания. платформа .NET Framework 4 поставляется с участником отслеживания, который записывает записи отслеживания в качестве трассировки событий для Windows (ETW).
Профиль отслеживания Механизм фильтрации, который позволяет участнику отслеживания подписаться на подмножество записей отслеживания, передаваемых из экземпляра рабочего процесса.

Следующая таблица содержит подробные сведения о записях отслеживания, создаваемых средой выполнения рабочего процесса.

Запись отслеживания Description
Записи отслеживания экземпляра рабочего процесса. Описывает жизненный цикл экземпляра рабочего процесса. Например, запись экземпляра создается при запуске и завершении рабочего процесса.
Записи отслеживания состояний действия. Подробные сведения о выполнении действия. Эти записи сообщают о состоянии действия рабочего процесса, например о планировании выполнения действия, о завершении действия или о возникновении ошибки.
Запись возобновления закладки. Создается при возобновлении закладки в экземпляре рабочего процесса.
Пользовательские записи отслеживания. Автор рабочего процесса может создавать настраиваемые записи отслеживания и выдавать их в рамках пользовательской операции.

Участник отслеживания подписывается на часть создаваемых объектов TrackingRecord, используя профили отслеживания. Профиль отслеживания содержит запросы отслеживания, которые позволяют подписываться на определенный тип записей отслеживания. Профили отслеживания можно указывать в коде или в конфигурации.

Настраиваемый участник отслеживания

API участника отслеживания позволяет расширить среду выполнения отслеживания с помощью пользовательского участника отслеживания, который может включать настраиваемую логику для обработки TrackingRecord объектов, созданных средой рабочего процесса.

Чтобы создать участника отслеживания, пользователь должен реализовать TrackingParticipant. В частности, метод Track должен быть реализован настраиваемым участником. Этот метод вызывается, когда TrackingRecord создается средой рабочего процесса.

public abstract class TrackingParticipant
{
    protected TrackingParticipant();

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

Полный участник отслеживания реализуется в файле ConsoleTrackingParticipant.cs. В следующем примере кода используется Track метод для участника пользовательского отслеживания.

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

}

Следующий пример кода добавляет консольного участника к средству вызова рабочего процесса.

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

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

Выдача пользовательских записей отслеживания

В этом образце также демонстрируется возможность создания CustomTrackingRecord объектов из пользовательских действий рабочего процесса:

  • Объекты CustomTrackingRecord создаются и заполняются определенными пользователем данными, которые, по замыслу пользователя, будут выдаваться вместе с записью.

  • Метод CustomTrackingRecord отслеживания создается путем вызова метода отслеживания ActivityContext.

В следующем примере продемонстрировано создание CustomTrackingRecord объектов в рамках пользовательской операции.

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

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

Использование этого образца

  1. Откройте файл решения CustomTrackingSample.sln с помощью Visual Studio.

  2. Для построения решения нажмите CTRL+SHIFT+B.

  3. Чтобы запустить решение, нажмите клавиши CTRL+F5.

См. также