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 operação falha porque a descriptografia da mensagem falhou. Os traços tanto da operação quanto da falha na descriptografia da mensagem aparecem na mesma atividade, mostrando correlação direta entre o erro de descriptografia e o erro de solicitação.

Configurando o rastreamento de atividade

O WCF fornece atividades predefinidas para processamento de 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 traços de código de usuário.

Para emitir rastreamentos de atividade em tempo de execução, use a ActivityTracing configuração para a origem de rastreamento System.ServiceModel, ou outras fontes de rastreamento WCF ou personalizadas, conforme demonstrado 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 o Rastreamento .

Visualizando atividades

Você pode exibir as atividades e a utilidade delas na Ferramenta de Visualização de Rastreamento de Serviço (SvcTraceViewer.exe). Quando o ActivityTracing está habilitado, essa ferramenta usa os rastreamentos e os classifica com base na atividade. Você também pode visualizar as transferências de rastreamento. Uma transferência de rastros indica como diferentes atividades estão relacionadas entre si. Você pode ver que uma atividade específica causou 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 fornece duas exibições de atividades:

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

  • Exibição de grafo , 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 para ver uma exibiçã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, eles fazem parte da mesma atividade. Como uma atividade pode cruzar os limites de um ponto de extremidade (uma solicitação), são definidos dois escopos para essa atividade.

  • Escopo Global, por aplicativo. Nesse escopo, a atividade é identificada pelo identificador de atividade global 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 sua gAId, juntamente com o nome da fonte de rastreamento que emite os rastreamentos de atividade e a ID do processo. Este trio forma a ID da 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 origem do rastreamento e a ID do processo. No código gerenciado, XmlWriterTraceListener gera traces 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 estritos, a evidência de uma atividade inicia na primeira vez que a ID da atividade é usada em um rastreamento emitido e termina a última vez em 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.

  • Início: 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 como 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".

  • Suspensão: 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.

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

Iniciar e parar rastreamentos não são críticos para correlação. No entanto, eles podem ajudar a aumentar o desempenho, a criação de perfil e a validação do escopo da atividade.

Usando 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 correlacionadas, caso a ferramenta siga rastros de transferência. Por exemplo, as ferramentas pararão de analisar os logs para determinada atividade quando encontrarem um registro de início/parada.

Esses tipos de rastreamento também podem ser usados para criação de perfil. Os recursos consumidos entre os marcadores de início e parada representam o tempo inclusivo da atividade, incluindo 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 "Stop trace" em vez de dentro de uma determinada atividade, isso pode indicar um possível defeito no código.

Diretrizes para usar o rastreamento de atividades

Veja a seguir uma diretriz sobre como usar rastreamentos do 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 significativo para o administrador do sistema ou para a capacidade de 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 longa (contínuas), como escutar conexões ou aguardar mensagens, são representadas por marcadores de início/parada correspondentes.

  • As atividades disparadas 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 "isso estava acontecendo quando . . . (ocorreu uma emissão de rastreamento)."

Consulte também