Compartilhar via


Configurando o acompanhamento de um fluxo de trabalho

Um fluxo de trabalho pode ser executado de três maneiras:

Dependendo da opção de hospedagem do fluxo de trabalho, um participante de rastreamento pode ser adicionado por meio de código ou por meio de um arquivo de configuração. Este tópico descreve como o acompanhamento é configurado adicionando um participante de rastreamento a um WorkflowApplication e a um WorkflowServiceHoste como habilitar o acompanhamento ao usar WorkflowInvoker.

Configurando o acompanhamento de aplicativos de fluxo de trabalho

Um fluxo de trabalho pode ser executado usando a WorkflowApplication classe. Este tópico demonstra como o acompanhamento é configurado para um aplicativo de fluxo de trabalho do .NET Framework 4.6.1 adicionando um participante de acompanhamento ao host de WorkflowApplication fluxo de trabalho. Nesse caso, o fluxo de trabalho é executado como um aplicativo de fluxo de trabalho. Você configura um aplicativo de fluxo de trabalho por meio de código (em vez de usar um arquivo de configuração), que é um arquivo .exe auto-hospedado usando a WorkflowApplication classe. O participante de rastreamento é adicionado como uma extensão à WorkflowApplication instância. Isso é feito adicionando a TrackingParticipant à coleção de extensões para a instância WorkflowApplication.

Para um aplicativo de fluxo de trabalho, você pode adicionar a EtwTrackingParticipant extensão de comportamento, conforme mostrado no código a seguir.

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

Configurando o acompanhamento do serviço de fluxo de trabalho

Um fluxo de trabalho pode ser exposto como um serviço WCF, quando hospedado no serviço host WorkflowServiceHost. WorkflowServiceHost é uma implementação especializada do .NET ServiceHost para um serviço baseado em fluxo de trabalho. Esta seção explica como configurar o acompanhamento para um serviço de fluxo de trabalho do .NET Framework 4.6.1 em execução.WorkflowServiceHost Ele é configurado por meio de um arquivo de Web.config (para um serviço hospedado na Web) ou um arquivo App.config (para um serviço hospedado em um aplicativo autônomo, como um aplicativo de console) especificando um comportamento de serviço ou por meio de código adicionando um comportamento específico de rastreamento à Behaviors coleção para o host de serviço.

Para um serviço de fluxo de trabalho hospedado em WorkflowServiceHost, você pode adicionar o EtwTrackingParticipant usando o elemento <behavior> em um arquivo de configuração, conforme demonstrado no exemplo a seguir.

<behaviors>
   <serviceBehaviors>
        <behavior>
          <etwTracking profileName="Sample Tracking Profile" />
        </behavior>
   </serviceBehaviors>
</behaviors>

Como alternativa, para um serviço de fluxo de trabalho hospedado em WorkflowServiceHost, você pode adicionar a extensão de comportamento por meio de código EtwTrackingParticipant. Para adicionar um participante de acompanhamento personalizado, crie uma nova extensão de comportamento e adicione-a ServiceHost ao conforme mostrado no código de exemplo a seguir.

Observação

Se você quiser exibir o código de exemplo que mostra como criar um elemento de comportamento personalizado que adiciona um participante de acompanhamento personalizado, consulte os exemplos de acompanhamento .

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

O participante de rastreamento é adicionado ao host do serviço de fluxo de trabalho como uma extensão do comportamento.

Este código de exemplo abaixo mostra como ler um perfil de acompanhamento do arquivo de configuração.

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;

Este código de exemplo mostra como adicionar um perfil de acompanhamento a um host de fluxo de trabalho.

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

Observação

Para obter mais informações sobre perfis de acompanhamento, consulte Perfis de Acompanhamento.

Configurando o acompanhamento usando WorkflowInvoker

Para configurar o acompanhamento de um fluxo de trabalho executado usando WorkflowInvoker, adicione o provedor de acompanhamento como uma extensão a uma WorkflowInvoker instância. O exemplo de código a seguir é do exemplo de Acompanhamento Personalizado .

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

Exibindo registros de acompanhamento no Visualizador de Eventos

Há dois logs do Visualizador de Eventos de interesse específico a serem exibidos ao acompanhar a execução do WF: o log de análise e o log de depuração. Ambos residem em Microsoft|Windows|Nó de aplicativo para servidores do aplicativo. Os logs nesta seção contêm eventos de um único aplicativo em vez de eventos que têm um impacto em todo o sistema.

Os eventos de rastreamento de depuração são gravados no log de depuração. Para coletar eventos de rastreamento de depuração de WF no visualizador de eventos, ative o log de depuração.

  1. Para abrir o Visualizador de Eventos, clique em Iniciar e clique em Executar. Na caixa de diálogo Executar, digite eventvwr.

  2. Na caixa de diálogo Visualizador de Eventos, expanda o nó de Logs de Aplicativos e Serviços.

  3. Expanda os nós Microsoft, Windows e Aplicativos de servidor de aplicativo.

  4. Clique com o botão direito do mouse no nó de Depurar sob o nó de Servidor de aplicativo-Aplicativos, e selecione Habilitar Log.

  5. Execute seu aplicativo habilitado para rastreamento para gerar eventos de rastreamento.

  6. Clique com o botão direito do mouse no nó Depurar e selecione Atualizar. Os eventos de rastreamento devem estar visíveis no painel central.

WF 4 fornece um participante de rastreamento que grava registros de rastreamento a uma sessão de rastreamento (ETW de evento para o Windows). O participante de rastreamento de ETW é configurado com um perfil de rastreamento para assinar a acompanhar registros. Quando você estiver ativado, os erros que acompanham registros são emitidas a ETW. Eventos de controle de (ETW entre o intervalo de 100-113) que correspondem aos eventos de rastreamento emissores por participante de rastreamento de ETW são gravados no log analítico.

Para exibir registros de acompanhamento, siga estas etapas.

  1. Para abrir o Visualizador de Eventos, clique em Iniciar e clique em Executar. Na caixa de diálogo Executar, digite eventvwr.

  2. Na caixa de diálogo Visualizador de Eventos, expanda o nó de Logs de Aplicativos e Serviços.

  3. Expanda os nós Microsoft, Windows e Aplicativos de servidor de aplicativo.

  4. Clique com o botão direito do mouse no nó Analítico sob o nó Servidor de aplicativo-Aplicativos e selecione Habilitar Log.

  5. Execute seu aplicativo com rastreamento habilitado para gerar registros de rastreamento.

  6. Clique com o botão direito do mouse no nó analítico e selecione Atualizar. Os registros de acompanhamento devem estar visíveis no painel central.

A imagem a seguir mostra o acompanhamento de eventos no visualizador de eventos:

Captura de tela do Visualizador de Eventos mostrando registros de acompanhamento.

Registrando uma ID de provedor específica do aplicativo

Se os eventos precisarem ser gravados em um log de aplicativo específico, siga estas etapas para registrar o novo manifesto do provedor.

  1. Declare a ID do provedor no arquivo de configuração do aplicativo.

    <system.serviceModel>
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>
    </system.serviceModel>
    
  2. Copie o arquivo de manifesto de %windir%\Microsoft.NET\Framework\<versão mais recente do .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man para um local temporário e renomeie-o como Microsoft.Windows.ApplicationServer.Applications_Provider1.man

  3. Altere o GUID no arquivo de manifesto a nova GUID.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  4. Altere o nome do provedor se você não quiser desinstalar o provedor padrão.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  5. Se você alterou o nome do provedor na etapa anterior, altere os nomes de canal no arquivo de manifesto para o novo nome do provedor.

    <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. Gere a DLL do recurso seguindo estas etapas.

    1. Instale o SDK do Windows. O SDK do Windows inclui o compilador de mensagens (mc.exe) e o compilador de recursos (rc.exe).

    2. Em um prompt de comando do SDK do Windows, execute mc.exe no novo arquivo de manifesto.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      
    3. Execute rc.exe no arquivo de recurso gerado na etapa anterior.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. Crie um arquivo cs vazio chamado NewProviderReg.cs.

    5. Crie uma DLL de recurso usando o compilador C#.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
      
    6. Altere o nome dll do recurso e da mensagem no arquivo de manifesto de Microsoft.Windows.ApplicationServer.Applications.Provider1.man para o novo nome 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. Use wevtutil para registrar o manifesto.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

Consulte também