Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере CustomTracking показано, как создать участника пользовательского отслеживания и записать содержимое данных отслеживания в консоль. Кроме того, в примере показано, как выдавать CustomTrackingRecord объекты, заполненные пользовательскими данными. Участник отслеживания на основе консоли фильтрует TrackingRecord объекты, излучаемые рабочим процессом, с помощью объекта профиля отслеживания, созданного в коде.
Детали образца
Windows Workflow Foundation (WF) предоставляет инфраструктуру отслеживания для отслеживания выполнения экземпляра рабочего процесса. Среда выполнения отслеживания реализует экземпляр рабочего процесса для выдачи событий, связанных с жизненным циклом рабочего процесса, событиями из действий рабочего процесса и пользовательскими событиями отслеживания. В следующей таблице приведены основные компоненты инфраструктуры отслеживания.
| Компонент | Описание |
|---|---|
| Отслеживание времени выполнения | Предоставляет инфраструктуру для выдачи записей отслеживания. |
| Отслеживание участников | Потребляет записи отслеживания. .NET Framework 4 поставляется с компонентом отслеживания, который записывает записи отслеживания как события для системы трассировки событий Windows (ETW). |
| Профиль отслеживания | Механизм фильтрации, позволяющий участнику процесса отслеживания подписаться на подмножество записей отслеживания, порождаемых экземпляром рабочего процесса. |
В следующей таблице приведены записи отслеживания, которые выдает среда выполнения рабочего процесса.
| Запись отслеживания | Описание |
|---|---|
| Записи отслеживания экземпляра рабочего процесса. | Описывает жизненный цикл экземпляра рабочего процесса. Например, запись экземпляра создается при запуске или завершении рабочего процесса. |
| Записи отслеживания состояния активности. | Подробные сведения о выполнении действия. Эти записи указывают состояние действия рабочего процесса, например, когда действие запланировано или когда действие завершается или когда возникает ошибка. |
| Запись восстановления закладки. | Создается всякий раз, когда закладка в экземпляре рабочего процесса возобновляется. |
| Пользовательские записи отслеживания. | Автор рабочего процесса может создавать пользовательские записи отслеживания и выдавать их в пользовательском действии. |
Участник отслеживания подписывается на подмножество испускаемых 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.