Partilhar via


Perfis de rastreamento

Os perfis de controle contêm consultas de controle que permitem que um participante de controle assine eventos de fluxo de trabalho que são emitidos quando o estado de uma instância de fluxo de trabalho muda em tempo de execução.

Perfis de rastreamento

Os perfis de acompanhamento são usados para especificar quais informações de rastreamento são emitidas para uma instância de fluxo de trabalho. Se nenhum perfil for especificado, todos os eventos de rastreamento serão emitidos. Se um perfil for especificado, os eventos de rastreamento especificados no perfil serão emitidos. Dependendo dos seus requisitos de monitoramento, você pode escrever um perfil que seja muito geral, que se inscreva em um pequeno conjunto de alterações de estado de alto nível em um fluxo 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 posteriormente.

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

<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 rastreamento são filtrados pelo modo de visibilidade dentro de um perfil de acompanhamento usando o ImplementationVisibility atributo. 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 controle emitidos por atividades compostas dentro de uma atividade de fluxo de trabalho, para especificar se as atividades que formam a implementação estão sendo rastreadas. O modo de visibilidade aplica-se ao nível do perfil de acompanhamento. A filtragem de registros de rastreamento para atividades individuais dentro de 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 controle neste documento.

Os dois modos de implementationVisibility visibilidade especificados pelo atributo no perfil de acompanhamento são RootScope e All. O uso do RootScope modo suprime os registros de controle para atividades que formam a implementação de uma atividade no caso em que uma atividade composta não é a raiz de um fluxo de trabalho. Isso implica que, quando uma atividade implementada usando outras atividades é adicionada a um fluxo de trabalho e o implementationVisibility conjunto como RootScope, apenas 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 controle serão emitidos para as atividades que formam a implementação. O uso do modo Todos permite que todos os registros de rastreamento sejam emitidos para a atividade raiz e todas as suas atividades compostas.

Por exemplo, suponha que MyActivity é 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 definido como implementationVisibilityRootScope, os registros de rastreamento são emitidos apenas para MyActivity. No entanto, não são emitidos registos para as atividades Atividade1 e Atividade2.

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

O implementationVisibility sinalizador aplica-se aos seguintes tipos de registo de controlo:

  • ActivityStateRecord

  • FaultPropagationRecord

  • CancelRequestedRecord

  • ActivityScheduledRecord

Nota

CustomTrackingRecords emitidos pela implementação da atividade não são filtrados pela configuração implementationVisibility .

A implementationVisibility funcionalidade é especificada como RootScope no perfil de rastreamento no código da seguinte maneira:

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

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

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

A ImplementationVisibility configuração no perfil de rastreamento é opcional. Por padrão, seu valor é definido como RootScope. Os valores para esse atributo também diferenciam maiúsculas de minúsculas.

Tipos de consulta de perfil de acompanhamento

Os perfis de acompanhamento são estruturados como assinaturas declarativas para registros de controle que permitem consultar o tempo de execução do fluxo de trabalho para registros de controle específicos. Há vários tipos de consulta que permitem que você se inscreva em diferentes classes de TrackingRecord objetos. Os perfis de rastreamento podem ser especificados na configuração ou através do código. Aqui estão os tipos de consulta mais comuns:

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

    Os estados que podem ser inscritos são especificados na WorkflowInstanceStates classe.

    A configuração ou o código usado para assinar registros de controle no nível de instância do fluxo de trabalho para o estado da Started instância usando o WorkflowInstanceQuery é mostrado 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 controlar as alterações do ciclo de vida das atividades que compõem uma instância de fluxo de trabalho. Por exemplo, você pode querer acompanhar sempre que a atividade "Enviar e-mail" for concluída em uma instância de fluxo de trabalho. Esta consulta é necessária para um TrackingParticipant subscrever 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 controle de estado de atividade que usam o ActivityStateQuery para a SendEmailActivity atividade 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 }
            }
        }
    };
    

    Nota

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

  • ActivityScheduledQuery - Esta consulta permite que você acompanhe uma atividade agendada para execução por uma atividade pai. A consulta é necessária para um TrackingParticipant para se inscrever em ActivityScheduledRecord objetos.

    A configuração e o código usados para assinar registros relacionados à atividade infantil que está sendo agendada SendEmailActivity usando o ActivityScheduledQuery é mostrado 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 rastrear o tratamento de falhas que ocorrem dentro de uma atividade. A consulta é necessária para um TrackingParticipant para se inscrever em FaultPropagationRecord objetos.

    A configuração e o código usados para assinar registros relacionados à propagação de falhas usando FaultPropagationQuery são mostrados 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 rastrear solicitações de cancelamento de uma atividade infantil pela atividade pai. A consulta é necessária para um TrackingParticipant para se inscrever em CancelRequestedRecord objetos.

    A configuração e o código usados para assinar registros relacionados ao cancelamento de atividades 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 rastrear eventos que você define em suas atividades de código. A consulta é necessária para um TrackingParticipant para se inscrever em CustomTrackingRecord objetos.

    A configuração e o código usados para assinar registros relacionados a registros de rastreamento personalizados usando 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 um TrackingParticipant subscrever BookmarkResumptionRecord objetos.

    A configuração e o código usados para assinar registros relacionados à retomada de marcadores usando 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 arbitrariamente os registros de rastreamento com um valor que pode ser configurado após o tempo de compilação. Por exemplo, você pode querer que vários registros de rastreamento em vários fluxos de trabalho sejam marcados com "Mail Server" == "Mail Server1". Isso facilita a localização de todos os registros com essa tag ao consultar registros de rastreamento mais tarde.

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 controle são usados para criar um perfil de controle usando um arquivo de configuração XML ou código do .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 de serviço de fluxo de trabalho, o perfil de controle normalmente é criado usando um arquivo de configuração. Também é possível criar um perfil de rastreamento com código usando o perfil de rastreamento e a API de consulta de rastreamento.

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

A detalhamento dos registros de rastreamento emitidos pelo host é determinada pelas definições de configuração dentro do perfil de rastreamento. Um participante de acompanhamento assina registros de acompanhamento adicionando consultas a um perfil de acompanhamento. Para assinar todos os registros de rastreamento, o perfil de acompanhamento 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 rastreamento.

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

    <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 rastreamento personalizados.

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

Consulte também