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


Настройка отслеживания рабочего процесса

Рабочий процесс может выполняться тремя способами.

В зависимости от выбранного варианта размещения рабочего процесса участник отслеживания может быть добавлен как посредством кода, так и через файл конфигурации. В этом разделе описывается, как настроить отслеживание посредством добавления участника отслеживания в 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 является специализированной реализацией класса ServiceHost библиотеки .NET для службы на основе рабочих процессов. В этом разделе объясняется, как настроить отслеживание для службы WorkflowServiceHostрабочих процессов платформа .NET Framework 4.6.1. Его настройка осуществляется с использованием файла 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 - аналитический журнал и журнал отладки. Оба находятся в корпорации Майкрософт|Windows |Узел Application Server-Applications. В этом разделе журналы содержат события из одного приложения, а не события, влияющие на всю систему.

События трассировки отладки записываются в журнал отладки. Для получения событий трассировки отладки WF в средстве просмотра включите журнал отладки.

  1. Чтобы открыть Просмотр событий, нажмите кнопку "Пуск" и нажмите кнопку "Выполнить". В диалоговом окне "Запуск" введите eventvwr.

  2. В диалоговом окне Просмотр событий разверните узел журналов приложений и служб.

  3. Разверните узлы Microsoft, Windows и Application Server-Applications.

  4. Щелкните правой кнопкой мыши узел отладки в узле application Server-Applications и выберите "Включить журнал".

  5. Чтобы сформировать события трассировки, запустите приложение с включенной функцией трассировки.

  6. Щелкните правой кнопкой мыши узел отладки и выберите "Обновить". События трассировки должны отображаться в центральной области.

WF 4 предоставляет участника отслеживания, который пишет записи трассировки в сеанс ETW (средство трассировки событий для Windows). Для подписки на записи отслеживания в участнике отслеживания трассировка событий Windows задается профиль отслеживания. Если включено отслеживание ошибок, записи отслеживания создаются в трассировке событий Windows. События трассировки событий Windows (в диапазоне 100–113), соответствующие событиям отслеживания, выпущенным участником отслеживания трассировки событий Windows, записываются в аналитический журнал.

Чтобы просмотреть записи отслеживания, выполните следующие действия.

  1. Чтобы открыть Просмотр событий, нажмите кнопку "Пуск" и нажмите кнопку "Выполнить". В диалоговом окне "Запуск" введите eventvwr.

  2. В диалоговом окне Просмотр событий разверните узел журналов приложений и служб.

  3. Разверните узлы Microsoft, Windows и Application Server-Applications.

  4. Щелкните правой кнопкой мыши узел аналитики в узле application Server-Applications и выберите "Включить журнал".

  5. Чтобы сформировать записи отслеживания, запустите приложение с включенной функцией отслеживания.

  6. Щелкните правой кнопкой мыши узел аналитики и выберите "Обновить". Записи отслеживания должны отображаться в центральной области.

На следующем рисунке показаны события отслеживания в средстве просмотра событий:

Screenshot of the Event Viewer showing tracking records.

Регистрация идентификатора поставщика конкретного приложения

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

  1. Укажите идентификатор поставщика в файле конфигурации приложения.

    <system.serviceModel>
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>
    </system.serviceModel>
    
  2. Скопируйте файл манифеста из %windir%\Microsoft.NET\Framework\<последняя версия платформа .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man в временное расположение и переименуйте его в Microsoft.Windows.ApplicationServer.Applications_Provider1.man.

  3. Замените идентификатор GUID в файле манифеста на новый идентификатор.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  4. Если вы не хотите удалять поставщик по умолчанию, измените имя поставщика.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  5. Если на предыдущем шаге имя поставщика было изменено, измените имена каналов в файле манифеста на имя нового поставщика.

    <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)" />
    
  6. Сформируйте DLL-библиотеку ресурсов, выполнив следующие действия.

    1. Установите пакет Windows SDK. Пакет SDK для Windows включает компилятор сообщений (mc.exe) и компилятор ресурсов (rc.exe).

    2. В командной строке Windows SDK примените команду run mc.exe к новому файлу манифеста.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      
    3. Примените команду rc.exe к файлу ресурсов, сформированному на предыдущем шаге.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. Создайте пустой файл CS с именем NewProviderReg.cs.

    5. Создайте DLL-библиотеку ресурсов с помощью компилятора C#.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
      
    6. Измените имя ресурса и библиотеки 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" />
      
    7. Используйте wevtutil для регистрации манифеста.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

См. также