Настраиваемое отслеживание
В примере 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);
Использование этого образца
Откройте файл решения CustomTrackingSample.sln с помощью Visual Studio.
Для построения решения нажмите CTRL+SHIFT+B.
Чтобы запустить решение, нажмите клавиши CTRL+F5.