Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Рабочий процесс может выполняться тремя способами:
Размещено в WorkflowServiceHost
Выполнено как WorkflowApplication
Выполнено непосредственно с помощью WorkflowInvoker
В зависимости от варианта размещения рабочего процесса участник отслеживания может быть добавлен либо через код, либо через файл конфигурации. В этом разделе описывается настройка отслеживания путем добавления участника отслеживания в объект WorkflowApplication и в WorkflowServiceHost, а также как включить отслеживание при использовании WorkflowInvoker.
Настройка отслеживания приложений рабочего процесса
Рабочий WorkflowApplication процесс может выполняться с помощью класса. В этом разделе показано, как настроить отслеживание для приложения рабочего процесса .NET Framework 4.6.1, добавляя участника отслеживания в узел рабочего процесса WorkflowApplication. В этом случае рабочий процесс выполняется в виде приложения рабочего процесса. Вы настраиваете приложение рабочего процесса с помощью кода (а не с помощью файла конфигурации), который является локальным .exe файлом с помощью WorkflowApplication класса. Участник отслеживания добавляется в качестве расширения WorkflowApplication в экземпляр. Это делается путем добавления TrackingParticipant в коллекцию расширений для экземпляра WorkflowApplication.
Для приложения рабочего процесса можно добавить расширение для поведения EtwTrackingParticipant, как показано в следующем коде.
LogActivity activity = new LogActivity();
WorkflowApplication instance = new WorkflowApplication(activity);
EtwTrackingParticipant trackingParticipant =
new EtwTrackingParticipant
{
TrackingProfile = new TrackingProfile
{
Name = "SampleTrackingProfile",
ActivityDefinitionId = "ProcessOrder",
Queries = new WorkflowInstanceQuery
{
States = { "*" }
}
}
};
instance.Extensions.Add(trackingParticipant);
Настройка отслеживания службы рабочих процессов
Рабочий процесс может быть предоставлен как служба WCF при размещении в WorkflowServiceHost узле службы. WorkflowServiceHost — это специализированная реализация .NET ServiceHost для службы на основе рабочего процесса. В этом разделе объясняется, как настроить отслеживание для службы рабочих процессов .NET Framework 4.6.1, запущенной в WorkflowServiceHost. Он настраивается с помощью файла Web.config (для веб-службы) или файла App.config (для службы, размещенной в автономном приложении, например, в консольном приложении) путем указания поведения службы или с помощью добавления конкретного поведения, связанного с отслеживанием, в коллекцию Behaviors для узла службы через код.
Для размещенной в WorkflowServiceHost службы рабочего процесса можно добавить EtwTrackingParticipant с помощью элемента <behavior> в файле конфигурации, как показано в следующем примере.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile" />
</behavior>
</serviceBehaviors>
</behaviors>
Кроме того, для службы рабочего потока, размещенной в WorkflowServiceHost, можно добавить расширение поведения EtwTrackingParticipant с помощью кода. Чтобы добавить настраиваемого участника отслеживания событий, создайте новое расширение поведения и включите его в ServiceHost, как показано в примером кода ниже.
Замечание
Если вы хотите просмотреть пример кода, демонстрирующий создание пользовательского элемента поведения, добавляющего участника пользовательского отслеживания, см. примеры отслеживания .
ServiceHost svcHost = new ServiceHost(typeof(WorkflowService), new
Uri("http://localhost:8001/Sample"));
EtwTrackingBehavior trackingBehavior =
new EtwTrackingBehavior
{
ProfileName = "Sample Tracking Profile"
};
svcHost.Description.Behaviors.Add(trackingBehavior);
svcHost.Open();
Участник отслеживания добавляется в хост службы рабочего процесса в качестве расширение к поведенческой модели.
В этом примере кода ниже показано, как считывать профиль отслеживания из файла конфигурации.
TrackingProfile GetProfile(string profileName, string displayName)
{
TrackingProfile trackingProfile = null;
TrackingSection trackingSection = (TrackingSection)WebConfigurationManager.GetSection("system.serviceModel/tracking");
if (trackingSection == null)
{
return null;
}
profileName ??= "";
//Find the profile with the specified profile name in the list of profile found in config
var match = from p in new List<TrackingProfile>(trackingSection.TrackingProfiles)
where (p.Name == profileName) && ((p.ActivityDefinitionId == displayName) || (p.ActivityDefinitionId == "*"))
select p;
if (match.Count() == 0)
{
//return an empty profile
trackingProfile = new TrackingProfile()
{
ActivityDefinitionId = displayName
};
}
else
{
trackingProfile = match.First();
}
return trackingProfile;
В этом примере кода показано, как добавить профиль отслеживания в хост рабочего процесса.
WorkflowServiceHost workflowServiceHost = serviceHostBase as WorkflowServiceHost;
if (null != workflowServiceHost)
{
string workflowDisplayName = workflowServiceHost.Activity.DisplayName;
TrackingProfile trackingProfile = GetProfile(this.profileName, workflowDisplayName);
workflowServiceHost.WorkflowExtensions.Add(() => new EtwTrackingParticipant {
TrackingProfile = trackingProfile
});
}
Замечание
Дополнительные сведения о профилях отслеживания см. в разделе "Профили отслеживания".
Настройка отслеживания с помощью WorkflowInvoker
Чтобы настроить отслеживание для рабочего процесса, выполняемого с помощью WorkflowInvoker, добавьте поставщика отслеживания в виде расширения к экземпляру WorkflowInvoker. Следующий пример кода представлен в примере пользовательского отслеживания .
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
invoker.Invoke();
Просмотр записей отслеживания в средстве просмотра событий
При отслеживании выполнения WF особый интерес представляют два журнала средства просмотра событий — аналитический журнал и журнал отладки. Оба находятся под узлом Microsoft|Windows|Application Server-Applications. Журналы в этом разделе содержат события из одного приложения, а не события, влияющие на всю систему.
События отладки записываются в журнал отладки. Чтобы собрать события трассировки отладки WF в Просмотре событий, включите журнал отладки.
Чтобы открыть средство просмотра событий, нажмите кнопку "Пуск" и нажмите кнопку "Выполнить". В диалоговом окне "Запуск" введите
eventvwr.В диалоговом окне просмотра событий разверните узел журналов приложений и служб .
Разверните узлы Microsoft, Windows и Application Server-Applications .
Щелкните правой кнопкой мыши узел отладки в узле application Server-Applications и выберите "Включить журнал".
Выполните приложение с поддержкой трассировки, чтобы создать события трассировки.
Щелкните правой кнопкой мыши узел отладки и выберите "Обновить". События трассировки должны отображаться в центральной области.
WF 4 предоставляет модуль отслеживания, который вносит данные отслеживания в сеанс трассировки событий (трассировка событий для Windows). Участник отслеживания ETW настраивается с профилем отслеживания для подписки на записи отслеживания. Когда включено отслеживание, записи об ошибках отправляются в ETW. События отслеживания ETW (в диапазоне от 100 до 113), соответствующие событиям отслеживания, создаваемым участником отслеживания ETW, записываются в аналитический журнал.
Чтобы просмотреть записи отслеживания, выполните следующие действия.
Чтобы открыть средство просмотра событий, нажмите кнопку "Пуск" и нажмите кнопку "Выполнить". В диалоговом окне "Запуск" введите
eventvwr.В диалоговом окне просмотра событий разверните узел журналов приложений и служб .
Разверните узлы Microsoft, Windows и Application Server-Applications .
Щелкните правой кнопкой мыши узел аналитики в узле application Server-Applications и выберите "Включить журнал".
Выполните приложение с поддержкой отслеживания для создания записей отслеживания.
Щелкните правой кнопкой мыши узел аналитики и выберите "Обновить". Записи отслеживания должны отображаться в центральной области.
На следующем рисунке показаны события отслеживания в окне просмотра событий.
Регистрация идентификатора поставщика для конкретного приложения
Если события необходимо записать в определенный журнал приложений, выполните следующие действия, чтобы зарегистрировать новый манифест поставщика.
Объявите идентификатор поставщика в файле конфигурации приложения.
<system.serviceModel> <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/> </system.serviceModel>Скопируйте файл манифеста из %windir%\Microsoft.NET\Framework\<последняя версия .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man в временное расположение и переименуйте его в Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Измените GUID в файле манифеста на новый GUID.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />Измените имя поставщика, если вы не хотите удалить поставщика по умолчанию.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />Если вы изменили имя поставщика на предыдущем шаге, измените имена каналов в файле манифеста на новое имя поставщика.
<channel name="Microsoft-Windows-Application Server-Applications_Provider1/Admin" chid="ADMIN_CHANNEL" symbol="ADMIN_CHANNEL" type="Admin" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ADMIN_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Operational" chid="OPERATIONAL_CHANNEL" symbol="OPERATIONAL_CHANNEL" type="Operational" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.OPERATIONAL_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Analytic" chid="ANALYTIC_CHANNEL" symbol="ANALYTIC_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ANALYTIC_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Debug" chid="DEBUG_CHANNEL" symbol="DEBUG_CHANNEL" type="Debug" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.DEBUG_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Perf" chid="PERF_CHANNEL" symbol="PERF_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.PERF_CHANNEL.message)" />Создайте ресурсную библиотеку DLL, выполнив следующие действия.
Установите пакет SDK для Windows. Пакет SDK для Windows включает компилятор сообщений (mc.exe) и компилятор ресурсов (rc.exe).
В командной строке пакета SDK для Windows запустите mc.exe в новом файле манифеста.
mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.manЗапустите rc.exe в файле ресурсов, созданном на предыдущем шаге.
rc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.rcСоздайте пустой cs-файл с именем NewProviderReg.cs.
Создайте библиотеку DLL ресурсов с помощью компилятора C#.
csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dllИзмените имя ресурса и имя библиотеки DLL сообщений в файле манифеста с
Microsoft.Windows.ApplicationServer.Applications.Provider1.manна новое имя библиотеки DLL.<provider name="Microsoft-Windows-Application Server-Applications_Provider1" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" symbol="Microsoft_Windows_ApplicationServer_ApplicationEvents" resourceFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" messageFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" />Используйте wevtutil для регистрации манифеста.
wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man