Compartilhar via


Atividade

Este tópico descreve os rastreamentos de atividades no modelo de rastreamento do WCF (Windows Communication Foundation). As atividades são unidades de processamento que ajudam o usuário a restringir o escopo de uma falha. Erros que ocorrem na mesma atividade estão diretamente relacionados. Por exemplo, uma falha na operação ocorre porque a decodificação da mensagem falhou. Os rastreamentos para a falha de decodificação de mensagem e operação aparecem na mesma atividade, o que mostra correlação direta entre o erro de decodificação e o erro de solicitação.

Configurando o rastreamento de atividade

O WCF fornece atividades predefinidas para processar aplicativos (consulte Lista de Atividades). Você também pode definir atividades programaticamente para agrupar rastreamentos de usuário. Para obter mais informações, consulte Emitindo rastreamentos de código de usuário.

Para emitir rastreamentos de atividade em tempo de execução, use a configuração ActivityTracing para a fonte de rastreamento System.ServiceModel ou outras fontes de rastreamento personalizadas ou WCF, conforme mostrado pelo código de configuração a seguir.

<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">  

Para entender mais sobre o elemento de configuração e os atributos que estão sendo usados, consulte o tópico Configurando Rastreamento.

Visualizando atividades

É possível exibir as atividades e seus utilitários na Ferramenta Visualizador de Rastreamento de Serviço (SvcTraceViewer.exe). Quando o ActivityTracing estiver habilitado, essa ferramenta usa os rastreamentos e classifica com base na atividade. Você também pode visualizar as transferências de rastreamento. Uma transferência de rastreamento indica como as atividades diferentes estão relacionadas entre si. Você pode visualizar que uma atividade específica gerou o início de outra. Por exemplo, uma solicitação de mensagem iniciou um handshake de segurança para obter um Token de Conversa Segura.

Correlacionando atividades no Visualizador de Rastreamento de Serviço

A ferramenta Visualizador de Rastreamento de Serviço oferece duas visualizações de atividades:

  • Visualização em lista, em que a ID da atividade é usada para correlacionar diretamente rastreamentos entre processos. Rastreamentos de processos diferentes, por exemplo, cliente e serviço, mas com a mesma ID de atividade são agrupados na mesma atividade. Portanto, um erro que ocorre no serviço e, em seguida, causa um erro no cliente aparece na mesma visualização de atividade na ferramenta.

  • Visualização de Graph, em que as atividades são agrupadas por processos. Nessa visualização, um cliente e um serviço com a mesma ID de atividade têm seus rastreamentos em atividades diferentes. Para correlacionar atividades com a mesma ID de atividade em processos diferentes, a ferramenta mostra fluxos de mensagens entre as atividades relacionadas.

Para obter mais informações e ter uma visualização gráfica da ferramenta Visualizador de Rastreamento de Serviço, consulte a Ferramenta Visualizador de Rastreamento de Serviço (SvcTraceViewer.exe) e Usando o Visualizador de Rastreamento de Serviço para exibir rastreamentos correlacionados e solução de problemas.

Definindo o escopo de uma atividade

Uma atividade é definida em tempo de design e indica uma unidade lógica de trabalho. Os rastreamentos emitidos com o mesmo identificador de atividade estão diretamente relacionados e fazem parte da mesma atividade. Já que uma atividade pode cruzar limites de ponto de extremidade (uma solicitação), são definidos dois escopos para uma atividade.

  • Escopo Global, por aplicativo. Nesse escopo, a atividade é identificada por seu identificador de atividade globalmente exclusivo de 128 bits, o gAId. O gAid é o propagado entre pontos de extremidade.

  • Escopo Local, por ponto de extremidade. Nesse escopo, a atividade é identificada por seu gAId, juntamente com o nome da fonte do rastreamento emitindo os rastreamentos de atividade e a ID do processo. Esses três constituem a ID de atividade local, lAId. O lAId é usado para definir os limites (locais) de uma atividade.

Esquema de rastreamento

Os rastreamentos podem ser emitidos usando qualquer esquema e em plataformas da Microsoft. "e2e" (para "End to End") é um esquema comumente usado. Esse esquema inclui um identificador de 128 bits (gAId), o nome de fonte de rastreamento e a ID do processo. No código gerenciado, XmlWriterTraceListener emite rastreamentos no esquema E2E.

Os desenvolvedores podem definir o AID emitido com um rastreamento definindo a propriedade ActivityId com um Guid no TLS (Armazenamento Local de Thread). O exemplo a seguir demonstra isso.

// set the current Activity ID to a new GUID.  
CorrelationManager.ActivityId = Guid.NewGuid();  

A configuração de gAId no TLS fica evidente quando os rastreamentos são emitidos usando uma fonte de rastreamento, conforme mostrado pelo exemplo a seguir.

TraceSource traceSource = new TraceSource("myTraceSource");  
traceSource.TraceEvent(TraceEventType.Warning, eventId, "Information");  

O rastreamento emitido contém o gAId atual no TLS, o nome da fonte de rastreamento passado como um parâmetro para o construtor da fonte de rastreamento e a ID do processo atual.

Tempo de vida da atividade

Em termos mais restritos, a evidência de uma atividade inicia na primeira vez que a ID da atividade é usada em um rastreamento emitido e termina na última vez que é usada em um rastreamento emitido. Um conjunto predefinido de tipos de rastreamento é fornecido por System.Diagnostics, incluindo Iniciar e Parar, para marcar explicitamente os limites de tempo de vida da atividade.

  • Iniciar: indica o início de uma atividade. Um rastreamento "Iniciar" mostra um registro do início de um novo marco de processamento. Ele contém uma nova ID de atividade para uma determinada fonte de rastreamento em um processo específico, exceto quando a ID da atividade é propagada entre os pontos de extremidade, nesse caso, visualizamos um "Iniciar" por ponto de extremidade. Exemplos de iniciar uma nova atividade incluem a criação de um novo thread para processamento ou a inserção de um novo método público.

  • Parar: indica o fim de uma atividade. Um rastreamento "Parar" mostra um registro de término de um marco de processamento existente. Esse rastreamento contém uma ID de atividade existente para uma determinada fonte de rastreamento em um processo específico, exceto quando a ID da atividade é propagada entre os pontos de extremidade. Nesse caso, visualizamos "Parar" por ponto de extremidade. Exemplos de interrupção de uma atividade incluem encerrar um processamento de thread ou sair de um método cujo início foi indicado com um rastreamento "Iniciar".

  • Suspender: indica a suspensão do processamento de uma atividade. Um rastreamento "Suspender" contém uma ID de atividade existente cujo processamento deve ser retomado posteriormente. Não é emitido nenhum rastreamento com essa ID entre os eventos Suspender e Retomar da fonte de rastreamento atual. Exemplos incluem pausar uma atividade ao chamar uma função de biblioteca externa ou ao aguardar um recurso, como uma porta de conclusão de E/S.

  • Retomar: indica a retomada do processamento de uma atividade. Um rastreamento "Retomar" contém uma ID de atividade existente cujo último rastreamento emitido da fonte de rastreamento atual foi um rastreamento "Suspender". Exemplos incluem retornar de uma chamada para uma função de biblioteca externa ou quando sinalizado para retomar o processamento por um recurso como uma porta de conclusão de E/S.

  • Transferir: já que algumas atividades são geradas por outras ou relacionadas a outras, as atividades podem estar relacionadas a outras atividades por meio de rastreamentos "Transferir". Uma transferência registra a relação direcionada de uma atividade para outra

Os rastreamentos Iniciar e Parar não são essenciais para a correlação. No entanto, podem ajudar a aumentar o desempenho, a criação de perfil e a validação do escopo da atividade.

Com esses tipos, as ferramentas podem otimizar a navegação nos logs de rastreamento para localizar os eventos imediatamente relacionados da mesma atividade ou eventos em atividades relacionadas, se a ferramenta seguir os rastreamentos de transferência. Por exemplo, as ferramentas deixam de analisar os logs de uma determinada atividade quando aparece um rastreamento Iniciar/Parar.

Esses tipos de rastreamento também podem ser usados para criação de perfil. Os recursos realizados entre os marcadores Iniciar e Parar representam o tempo inclusivo da atividade, incluindo as atividades lógicas contidas. A subtração dos intervalos de tempo entre os rastreamentos Suspender e Retomar fornece o tempo real de atividade.

O rastreamento Parar também é muito útil para validar o escopo das atividades implementadas. Se alguns rastreamentos de processamento aparecerem após o rastreamento Parar, em vez de em uma determinada atividade, pode significar um defeito de código.

Instruções para usar o rastreamento de atividade

Veja abaixo instruções sobre como usar rastreamentos de ActivityTracing (Iniciar, Parar, Suspender, Retomar e Transferir).

  • O rastreamento é um grafo cíclico direcionado, não uma árvore. É possível devolver o controle para uma atividade que gerou uma atividade.

  • Uma atividade indica um limite de processamento que pode ser importante para o administrador do sistema ou para oferecer suporte.

  • Cada método WCF, tanto no cliente quanto no servidor, é limitado pelo início de uma nova atividade e, em seguida, (depois que o trabalho é feito) encerra a nova atividade e retorna à atividade ambiente.

  • Atividades de execução prolongada (em andamento), como escutar conexões ou aguardar mensagens, são representadas por marcadores Iniciar/Parar correspondentes.

  • As atividades iniciadas pelo recebimento ou processamento de uma mensagem são representadas por limites de rastreamento.

  • As atividades representam atividades, não necessariamente objetos. Uma atividade deve ser interpretada como "a atividade estava acontecendo quando . . . (ocorreu uma emissão de rastreamento)."

Confira também