Controlando perfis

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

Controlando perfis

Controlando os perfis são usados para especificar que as informações de rastreamento é emitida para uma instância de fluxo de trabalho. Se nenhum perfil for especificado, então todos os eventos de rastreamento são emitidas. Se um perfil for especificado, então os eventos de rastreamento especificados no perfil serão emitidos. Dependendo dos requisitos de monitoramento, você pode escrever um perfil que é muito geral, que assina um pequeno conjunto de alterações de estado de alto nível em um fluxo de trabalho. Inversamente, você pode criar um perfil muito detalhado cujos eventos resultantes são muito ricos reconstruir posteriormente um fluxo detalhado de execução.

Os perfis de rastreamento se manifestam como elementos XML em um arquivo de configuração padrão do .NET Framework ou especificados em código. O exemplo a seguir é de um perfil de rastreamento 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 equivalente de rastreamento 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 },
        }
    }
};

Controlando registros são filtrados com o modo de visibilidade em um perfil de rastreamento usando o atributo ImplementationVisibility . Uma atividade composto é uma atividade de nível superior que contém outras atividades que formam a sua implementação. O modo de visibilidade especifica os registros de rastreamento de atividades emissores compostas em uma atividade de fluxo de trabalho, para especificar se as atividades que formam a implementação estão sendo controladas. O modo de visibilidade se aplica a nível de perfil de rastreamento. A filtragem de registros de controle para atividades individuais em um fluxo de trabalho é controlada por consultas no perfil de rastreamento. Para obter mais informações, consulte a seção Tipos de consulta de perfil de rastreamento neste documento.

Os dois modos de visibilidade especificado pelo atributo de implementationVisibility no perfil de rastreamento são RootScope e All. Usar o modo de RootScope suprime os registros de controle para as atividades que formam a implementação de uma atividade em casos onde uma atividade composta não é a raiz de um fluxo de trabalho. Isso significa que, quando uma atividade que é implementada usando outras atividades é adicionada a um fluxo de trabalho, e implementationVisibility definido como RootScope, somente a última atividade de nível superior dentro da atividade composto é rastreada. Se uma atividade é a raiz de fluxo de trabalho, então a implementação da atividade é o próprio fluxo de trabalho e os registros de rastreamento são emitidas para as atividades que formam a implementação. Usar qualquer modo permite que todos os registros de rastreamento ser emitida para atividades raiz e todas as suas 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 rastreamento é ativado com um perfil de rastreamento com implementationVisibility definido como RootScope, os registros de rastreamento são emitidos apenas para MyActivity. No entanto, nenhum registro é emitido para as atividades Activity1 e Activity2.

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

O sinalizador de implementationVisibility 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 de implementationVisibility é especificado como All no perfil de rastreamento em um arquivo de configuração como segue:

<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, o valor é definido como RootScope. Os valores para este atributo são também maiúsculas de minúsculas.

Controlando tipos de consulta de perfil

Controlando os perfis são estruturados como as assinaturas declarativas para controlar os registros que permitem que você possa ver o runtime de fluxo de trabalho para o controle específico registro. Há vários tipos de consulta que permitem autenticação para classes diferentes de objetos de TrackingRecord . Controlar perfis pode ser especificado na configuração ou com o código. Aqui estão os tipos de consulta mais comuns:

  • WorkflowInstanceQuery - use isso para controlar as alterações do ciclo de vida de instância de fluxo de trabalho como Started precedente- demonstrado e Completed. WorkflowInstanceQuery é usado para assinar seguintes a TrackingRecord os 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 controlar as alterações do ciclo de vida de atividades que compõem uma instância de fluxo de trabalho. Por exemplo, convém manter controle cada vez de "atividade Enviar email" termina 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 a são especificados em ActivityStates.

    A configuração e o código usados para assinar o estado da atividade que controla os registros que usam ActivityStateQuery para atividades de 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 de activityStateQuery têm o mesmo nome, somente os estados no último elemento são usados no perfil de rastreamento.

  • ActivityScheduledQuery - esta consulta permite que você controla uma atividade agendada para execução por uma atividade pai. 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 controlar a manipulação 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 os registros relacionados à propagação de falha que usa 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 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 eventos de rastreamento que você define nas 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 controlar a ressunção de um indexador 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ê marca arbitrariamente registros de rastreamento com um valor que pode ser configurado após 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 localizar todos os registros com essa marca ao consultar o rastreamento registra posteriormente.

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

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

Como criar um perfil de rastreamento

Os elementos de consulta de rastreamento são usados para criar um perfil de rastreamento usando um arquivo de configuração XML ou código .NET Framework 4.6.1. Aqui está um exemplo de um perfil de rastreamento 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 rastreamento com o código usando o perfil de rastreamento e a consulta API de rastreamento.

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

  • 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 rastreamento para obter todos os registros personalizados de rastreamento.

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

Confira também