Configurando o rastreamento para um fluxo de trabalho

Um fluxo de trabalho pode executar em três maneiras:

Dependendo do fluxo de trabalho que hospeda a opção, um participante de rastreamento pode ser adicionado ao código ou em um arquivo de configuração. Este tópico descreve como controlando é configurado adicionando um participante de rastreamento a WorkflowApplication e a WorkflowServiceHost, e como ativar o rastreamento para usar WorkflowInvoker.

Configurando o rastreamento de aplicativo de fluxo de trabalho

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

Para um aplicativo de fluxo de trabalho, você pode adicionar a extensão do comportamento de EtwTrackingParticipant 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 acompanhar de Serviço de Fluxo de Trabalho

Um fluxo de trabalho pode ser exposto como um serviço WCF quando hospedado no host serviço de WorkflowServiceHost. WorkflowServiceHost é uma implementação específica do .NET ServiceHost para um serviço fluxo de trabalho- base. 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 no WorkflowServiceHost. É configurada por um arquivo web.config (para um serviço web hospedado) ou um arquivo App.config (para um serviço hospedado em um aplicativo autônomo, como um aplicativo de console) especificando um comportamento do serviço ou com o código adicionando um comportamento acompanhamento- específico à coleção de Behaviors para o host serviço.

Para um serviço de fluxo de trabalho hospedado no WorkflowServiceHost, você pode adicionar o EtwTrackingParticipant usando o elemento <behavior> em um arquivo de configuração, conforme mostrado 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 do comportamento de EtwTrackingParticipant com o código. Para adicionar um participante personalizado de rastreamento, criar uma nova extensão do comportamento e adicioná-lo a ServiceHost conforme mostrado no código de exemplo a seguir.

Observação

Se você deseja exibir o código de exemplo que mostra como criar um elemento personalizado do comportamento que adiciona um participante personalizado de acompanhamento, confira 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 serviço de fluxo de trabalho como uma extensão para o comportamento.

Este exemplo de código abaixo mostra como ler um perfil de rastreamento 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 exemplo de código mostra como adicionar um perfil de rastreamento 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, confira Perfis de Acompanhamento.

Configurando o rastreamento usando WorkflowInvoker

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

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

Registros de exibição de rastreamento no visualizador de eventos

Há dois logs do visualizador de eventos de interesse específico exibir quando controlando a execução de WF - o log analítico e depuração de log. Ambos residem em Microsoft|Windows|Nó de aplicativo para servidores do aplicativo. Os logs dentro desta seção contêm eventos de um único aplicativo em vez de eventos que têm um impacto no sistema inteiro.

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 Visualizador de Eventos, clique em Iniciar e 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 o aplicativo rastreamento ativado 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 rastreamento, siga estas etapas.

  1. Para abrir Visualizador de Eventos, clique em Iniciar e 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. Executar o aplicativo acompanhamento- ativado gerar registros de rastreamento.

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

A imagem a seguir mostra eventos de rastreamento no visualizador de eventos:

Screenshot of the Event Viewer showing tracking records.

Registrando um ID específico do aplicativo provedor

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

  1. Declare a identificação 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 o renomeie 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 desejar 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. Gerencia o DLL de recurso seguindo estas etapas.

    1. Instalar o Windows SDK. O SDK do Windows inclui o compilador de mensagem (mc.exe) e o compilador de recurso (rc.exe).

    2. Em um prompt de comando do Windows SDK, execução mc.exe no novo arquivo de manifesto.

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

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

    5. Criar 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
      

Confira também