Compartilhar via


Perfis de Rastreamento

Os perfis de rastreio contêm consultas de rastreio que permitem que um participante de rastreio assine eventos de fluxo de trabalho emitidos quando o estado de uma instância de fluxo de trabalho é alterado durante o tempo de execução.

Perfis de Rastreamento

Perfis de acompanhamento são usados para especificar quais informações de acompanhamento são emitidas para uma instância de fluxo de trabalho. Se nenhum perfil for especificado, todos os eventos de acompanhamento serão emitidos. Se um perfil for especificado, os eventos de acompanhamento especificados no perfil serão emitidos. Dependendo dos seus requisitos de monitoramento, você pode criar um perfil muito geral, que monitore um pequeno conjunto de alterações de estado de alto nível em um processo de trabalho. Por outro lado, você pode criar um perfil muito detalhado cujos eventos resultantes são ricos o suficiente para reconstruir um fluxo de execução detalhado mais tarde.

Os perfis de acompanhamento se manifestam como elementos XML em um arquivo de configuração padrão do .NET Framework ou especificados no código. O exemplo a seguir é de um perfil de acompanhamento do .NET Framework 4.6.1 em um arquivo de configuração que permite que um participante de rastreamento assine os eventos de fluxo de trabalho Started e Completed.

<system.serviceModel>
    ...
    <tracking>
     <profiles>
      <trackingProfile name="Sample Tracking Profile">
        <workflow activityDefinitionId="*">
          <workflowInstanceQueries>
            <workflowInstanceQuery>
              <states>
                <state name="Started"/>
                <state name="Completed"/>
              </states>
            </workflowInstanceQuery>
          </workflowInstanceQueries>
        </workflow>
      </trackingProfile>
    </profiles>
  </tracking>
    ...
</system.serviceModel>

O exemplo a seguir mostra o perfil de acompanhamento equivalente criado usando código.

TrackingProfile profile = new TrackingProfile()
{
    Name = "CustomTrackingProfile",
    Queries =
    {
        new WorkflowInstanceQuery()
        {
            // Limit workflow instance tracking records for started and
            // completed workflow states.
            States = { WorkflowInstanceStates.Started, WorkflowInstanceStates.Completed },
        }
    }
};

Os registros de acompanhamento são filtrados por meio do modo de visibilidade dentro de um perfil de acompanhamento usando o atributo ImplementationVisibility. Uma atividade composta é uma atividade de nível superior que contém outras atividades que formam sua implementação. O modo de visibilidade especifica os registros de rastreamento emitidos de atividades compostas dentro de uma atividade de fluxo de trabalho, para verificar se as atividades que formam a implementação estão sendo rastreadas. O modo de visibilidade se aplica a nível de perfil de rastreamento. A filtragem de registros de acompanhamento para atividades individuais em um fluxo de trabalho é controlada pelas consultas dentro do perfil de acompanhamento. Para obter mais informações, consulte a seção Tipos de Consulta de Perfil de Acompanhamento neste documento.

Os dois modos de visibilidade especificados pelo implementationVisibility atributo no perfil de acompanhamento são RootScope e All. O uso do modo RootScope suprime os registros de acompanhamento das atividades que constituem a implementação de uma atividade quando uma atividade composta não é a raiz de um fluxo de trabalho. Isso implica que, quando uma atividade que é implementada usando outras atividades é adicionada a um fluxo de trabalho, e o implementationVisibility está definido como RootScope, somente a atividade de nível superior dentro dessa atividade composta é rastreada. Se uma atividade for a raiz do fluxo de trabalho, a implementação da atividade será o próprio fluxo de trabalho e os registros de acompanhamento serão emitidos para atividades que formam a implementação. O uso do modo All permite que todos os registros de acompanhamento sejam emitidos para a atividade raiz e todas as atividades compostas.

Por exemplo, suponha que MyActivity seja uma atividade composta cuja implementação contém duas atividades, Activity1 e Activity2. Quando essa atividade é adicionada a um fluxo de trabalho e o acompanhamento é habilitado com um perfil de acompanhamento com implementationVisibility definido como RootScope, os registros de acompanhamento são emitidos apenas para MyActivity. No entanto, nenhum registro é emitido para atividades Activity1 e Activity2.

No entanto, se o implementationVisibility atributo do perfil de acompanhamento estiver definido como All, os registros de acompanhamento serão emitidos não apenas para MyActivity, mas também para atividades Activity1 e Activity2.

O implementationVisibility sinalizador se aplica aos seguintes tipos de registro de acompanhamento:

  • ActivityStateRecord

  • FaultPropagationRecord

  • CancelRequestedRecord

  • ActivityScheduledRecord

Observação

CustomTrackingRecords emitiu-se de implementação de atividade não é filtrado para fora pela configuração de implementationVisibility.

A funcionalidade de implementationVisibility é especificado como RootScope no perfil de rastreamento em código como segue:

TrackingProfile sampleTrackingProfile = new TrackingProfile()
{
    Name = "Sample Tracking Profile",
    ImplementationVisibility = ImplementationVisibility.RootScope
};

A funcionalidade implementationVisibility é especificada como All no perfil de acompanhamento de um arquivo de configuração da seguinte maneira:

<tracking>
      <profiles>
        <trackingProfile name="Shipping Monitoring" implementationVisibility="All">
          <workflow activityDefinitionId="*">
...
         </workflow>
        </trackingProfile>
      </profiles>
</tracking>

ImplementationVisibility que define o perfil de rastreamento é opcional. Por padrão, seu valor é definido como RootScope. Os valores para este atributo são também maiúsculas de minúsculas.

Controlando tipos de consulta de perfil

Os perfis de acompanhamento são estruturados como assinaturas declarativas para registros de acompanhamento, permitindo que você consulte o tempo de execução do fluxo de trabalho para registros de acompanhamento específicos. Há vários tipos de consulta que permitem a inscrição em diferentes classes de TrackingRecord objetos. Os perfis de acompanhamento podem ser especificados na configuração ou por meio do código. Aqui estão os tipos de consulta mais comuns:

  • WorkflowInstanceQuery - Use isso para acompanhar as alterações do ciclo de vida da instância de fluxo de trabalho, como o demonstrado Started anteriormente e Completed. O WorkflowInstanceQuery é usado para assinar os seguintes TrackingRecord objetos:

    Os estados a que pode ser assinado são especificados na classe de WorkflowInstanceStates .

    A configuração ou código usada para assinar os registros de acompanhamento de instância nível de fluxo de trabalho do estado da instância de Started que usa WorkflowInstanceQuery são mostrados no exemplo a seguir.

    <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states>
            <state name="Started"/>
          </states>
        </workflowInstanceQuery>
    </workflowInstanceQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new WorkflowInstanceQuery()
            {
                States = { WorkflowInstanceStates.Started}
            }
        }
    };
    
  • ActivityStateQuery - Use isso para acompanhar as alterações do ciclo de vida das atividades que compõem uma instância de fluxo de trabalho. Por exemplo, talvez você queira acompanhar toda vez que a atividade "Enviar Email" for concluída em uma instância de fluxo de trabalho. Esta consulta é necessária para que TrackingParticipant assine a ActivityStateRecord objetos. Os estados disponíveis para assinar são especificados em ActivityStates.

    A configuração e o código usados para assinar registros de acompanhamento de estado de atividade que usam o ActivityStateQuery para a atividade SendEmailActivity são mostrados no exemplo a seguir.

    <activityStateQueries>
      <activityStateQuery activityName="SendEmailActivity">
        <states>
          <state name="Closed"/>
        </states>
      </activityStateQuery>
    </activityStateQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityStateQuery()
            {
                ActivityName = "SendEmailActivity",
                States = { ActivityStates.Closed }
            }
        }
    };
    

    Observação

    Se vários elementos activityStateQuery tiverem o mesmo nome, somente os estados no último elemento serão usados no perfil de acompanhamento.

  • ActivityScheduledQuery - Essa consulta permite que você acompanhe uma atividade agendada para execução por uma atividade principal. A consulta é necessária para que TrackingParticipant assine a ActivityScheduledRecord objetos.

    A configuração e o código usados para assinar os registros filho relacionados à atividade de SendEmailActivity que está sendo agendada usando ActivityScheduledQuery são mostrados no exemplo a seguir.

    <activityScheduledQueries>
      <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </activityScheduledQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityScheduledQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • FaultPropagationQuery - Use isso para acompanhar o tratamento de falhas que ocorrem dentro de uma atividade. A consulta é necessária para que TrackingParticipant assine a FaultPropagationRecord objetos.

    A configuração e o código usados para assinar registros relacionados à propagação de falhas usando FaultPropagationQuery é mostrado no exemplo a seguir.

    <faultPropagationQueries>
      <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" />
    </faultPropagationQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new FaultPropagationQuery()
            {
                FaultSourceActivityName = "SendEmailActivity",
                FaultHandlerActivityName = "NotificationsFaultHandler"
            }
        }
    };
    
  • CancelRequestedQuery - use isso para controlar solicitações cancelar uma atividade filho pela atividade pai. A consulta é necessária para que TrackingParticipant assine a CancelRequestedRecord objetos.

    A configuração e o código usados para assinar registros relacionados ao cancelamento de atividade usando CancelRequestedQuery são mostrados no exemplo a seguir.

    <cancelRequestedQueries>
      <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </cancelRequestedQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CancelRequestedQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • CustomTrackingQuery - Use isso para acompanhar os eventos que você define em suas atividades de código. A consulta é necessária para que TrackingParticipant assine a CustomTrackingRecord objetos.

    A configuração e o código usados para assinar os registros relacionados aos registros personalizados de rastreamento que usam CustomTrackingQuery são mostrados no exemplo a seguir.

    <customTrackingQueries>
      <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" />
    </customTrackingQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CustomTrackingQuery()
            {
                Name = "EmailAddress",
                ActivityName = "SendEmailActivity"
            }
        }
    };
    
  • BookmarkResumptionQuery - Use isso para acompanhar a retomada de um marcador em uma instância de fluxo de trabalho. Esta consulta é necessária para que TrackingParticipant assine a BookmarkResumptionRecord objetos.

    A configuração e o código usados para assinar os registros relacionados à ressunção do indexador que usa BookmarkResumptionQuery são mostrados no exemplo a seguir.

    <bookmarkResumptionQueries>
      <bookmarkResumptionQuery name="SentEmailBookmark" />
    </bookmarkResumptionQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new BookmarkResumptionQuery()
            {
                Name = "sentEmailBookmark"
            }
        }
    };
    

Anotações

As anotações permitem que você marque de forma arbitrária registros de rastreamento com um valor que pode ser configurado após o tempo de compilação. Por exemplo, você pode querer vários registros de rastreamento através de vários fluxos de trabalho a ser etiquetados com "Mail Server" == "Mail Server1". Isso facilita a localização de todos os registros com essa marca ao consultar registros de acompanhamento posteriormente.

Para fazer isso, uma anotação é adicionada a uma consulta de acompanhamento, conforme mostrado no exemplo a seguir.

<activityStateQuery activityName="SendEmailActivity">
  <states>
    <state name="Closed"/>
  </states>
  <annotations>
    <annotation name="MailServer" value="Mail Server1"/>
  </annotations>
</activityStateQuery>

Como criar um perfil de acompanhamento

Os elementos de consulta de acompanhamento são usados para criar um perfil de acompanhamento usando um arquivo de configuração XML ou um código .NET Framework 4.6.1. Aqui está um exemplo de um perfil de acompanhamento criado usando um arquivo de configuração.

<system.serviceModel>
  <tracking>
    <profiles>
      <trackingProfile name="Sample Tracking Profile ">
        <workflow activityDefinitionId="*">
          <!--Specify the tracking profile query elements to subscribe for tracking records-->
        </workflow>
      </trackingProfile>
    </profiles>
  </tracking>
</system.serviceModel>

Aviso

Para um WF usando o host serviço de fluxo de trabalho, o perfil de rastreamento é normalmente criado usando um arquivo de configuração. Também é possível criar um perfil de acompanhamento com código usando o perfil de acompanhamento e a API de consulta de acompanhamento.

Um perfil configurado como um arquivo de configuração XML é aplicado a um participante de rastreamento que usa uma extensão de comportamento. Isso é adicionado a um WorkflowServiceHost, conforme descrito na seção posterior configurando o rastreamento para um fluxo de trabalho.

A verbosidade de registros de rastreamento emissores pelo host é determinada pelas configurações dentro do perfil de rastreamento. Um participante de rastreamento assina controlar registros adicionando consultas a um perfil de rastreamento. Para assinar todos os registros de rastreamento, o perfil de rastreamento precisa especificar todas as consultas de rastreamento usando "*" nos campos de nome em cada uma das consultas.

Aqui estão alguns dos exemplos comuns de perfis de acompanhamento.

  • Um perfil de controle para obter registros e falhas de instância de fluxo de trabalho.

    <trackingProfile name="Instance and Fault Records">
      <workflow activityDefinitionId="*">
        <workflowInstanceQueries>
          <workflowInstanceQuery>
            <states>
              <state name="*" />
            </states>
          </workflowInstanceQuery>
        </workflowInstanceQueries>
        <activityStateQueries>
          <activityStateQuery activityName="*">
            <states>
              <state name="Faulted"/>
            </states>
          </activityStateQuery>
        </activityStateQueries>
      </workflow>
    </trackingProfile>
    
  • Um perfil de acompanhamento para obter todos os registros de acompanhamento personalizados.

    <trackingProfile name="Instance_And_Custom_Records">
      <workflow activityDefinitionId="*">
        <customTrackingQueries>
          <customTrackingQuery name="*" activityName="*" />
        </customTrackingQueries>
      </workflow>
    </trackingProfile>
    

Consulte também