Atividade
Este tópico descreve rastreamentos de atividade no modelo de rastreamento do Windows Communication Foundation (WCF). As atividades são unidades de processamento que ajudam o usuário a reduzir o escopo de uma falha. Os erros que ocorrem na mesma atividade estão diretamente relacionados. Por exemplo, uma operação falha porque a desencriptação da mensagem falhou. Os rastreamentos para a operação e a falha de desencriptação da mensagem aparecem na mesma atividade, mostrando uma correlação direta entre o erro de desencriptação e o erro de pedido.
Configurando o rastreamento de atividades
O WCF fornece atividades predefinidas para processar aplicativos (consulte Lista de atividades). Você também pode definir atividades programaticamente para agrupar rastreamentos de usuários. Para obter mais informações, consulte Emitting User-Code Traces.
Para emitir rastreamentos de atividade em tempo de execução, use a ActivityTracing
configuração para a System.ServiceModel
fonte de rastreamento ou outras fontes de rastreamento personalizadas ou WCF, 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 .
Atividades de visualização
Você pode exibir as atividades e seu utilitário na ferramenta Service Trace Viewer Tool (SvcTraceViewer.exe). Quando o ActivityTracing está habilitado, essa ferramenta pega os rastreamentos e os classifica com base na atividade. Você também pode ver transferências de rastreamento. Uma transferência de rastreamento indica como diferentes atividades estão relacionadas entre si. Você pode ver que uma determinada atividade fez com que outra começasse. Por exemplo, uma solicitação de mensagem iniciou um handshake de segurança para obter um Secure Conversation Token.
Correlacionando atividades no Service Trace Viewer
A ferramenta Visualizador de Rastreamento de Serviço fornece duas exibições de atividades:
Exibição de lista , onde o ID da atividade é usado para correlacionar diretamente rastreamentos entre processos. Rastreamentos de processos diferentes, por exemplo, cliente e serviço, mas com o mesmo ID de atividade são agrupados na mesma atividade. Portanto, um erro que ocorre no serviço e que causa um erro no cliente aparecerá na mesma visualização de atividade na ferramenta.
Visualização de gráfico , onde as atividades são agrupadas por processos. Nessa visualização, um cliente e um serviço com o mesmo ID de atividade têm seus rastros em atividades diferentes. Para correlacionar atividades com o mesmo ID de atividade em processos diferentes, a ferramenta mostra fluxos de mensagens entre as atividades relacionadas.
Para obter mais informações e ver uma exibição gráfica da ferramenta Visualizador de Rastreamento de Serviço, consulte 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 denota uma unidade lógica de trabalho. Os vestígios emitidos com o mesmo identificador de atividade estão diretamente relacionados, fazem parte da mesma atividade. Como uma atividade pode cruzar os limites do ponto de extremidade (uma solicitação), dois escopos para uma atividade são definidos.
Global
âmbito, por aplicação. Neste âmbito, a atividade é identificada pelo seu identificador de atividade global único de 128 bits, o gAId. O gAid é o que é propagado através de endpoints.Local
escopo, por ponto de extremidade. Neste âmbito, a atividade é identificada pelo seu gAId, juntamente com o nome da origem do rastreio que emite os rastreamentos de atividade e o ID do processo. Este trio constitui a atividade local id, 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 Microsoft. "e2e" (para "End to End") é um esquema comumente usado. Esse esquema inclui um identificador de 128 bits (gAId), o nome da fonte de rastreamento e a ID do processo. No código gerenciado, XmlWriterTraceListener emite rastreamentos no esquema E2E.
Os desenvolvedores podem definir o AID que é emitido com um rastreamento definindo a ActivityId propriedade com um Guid no Thread Local Storage (TLS). O exemplo a seguir demonstra isso.
// set the current Activity ID to a new GUID.
CorrelationManager.ActivityId = Guid.NewGuid();
A configuração do gAId em TLS será evidente quando os rastreamentos forem emitidos usando uma fonte de rastreamento, como mostrado pelo exemplo a seguir.
TraceSource traceSource = new TraceSource("myTraceSource");
traceSource.TraceEvent(TraceEventType.Warning, eventId, "Information");
O rastreamento emitido conterá o gAId atualmente em 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 começa na primeira vez que o ID de atividade é usado em um rastreamento emitido e termina na última vez que é usado em um rastreamento emitido. Um conjunto predefinido de tipos de rastreamento é fornecido pela System.Diagnostics, incluindo Start e Stop, para marcar explicitamente os limites do tempo de vida da atividade.
Início: indica o início de uma atividade. Um rastreamento "Start" fornece um registro do início de uma nova etapa de processamento. Ele contém um novo ID de atividade para uma determinada fonte de rastreamento em um determinado processo, exceto quando o ID de atividade é propagado entre pontos de extremidade, caso em que vemos um "Start" por ponto de extremidade. Exemplos de início de 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" fornece um registro de término de uma etapa de processamento existente. Ele contém um ID de atividade existente para uma determinada fonte de rastreamento em um determinado processo, exceto quando o ID de atividade é propagado entre pontos de extremidade, caso em que vemos um "Parar" por ponto de extremidade. Exemplos de interrupção de uma atividade incluem encerrar um thread de processamento ou sair de um método cujo início foi indicado com um rastreamento "Start".
Suspender: indica a suspensão do processamento de uma atividade. Um rastreamento "Suspender" contém um ID de atividade existente cujo processamento deve ser retomado posteriormente. Nenhum rastreamento é emitido com essa ID entre os eventos Suspender e Retomar da fonte de rastreamento atual. Os 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.
Currículo: Indica a retomada do processamento de uma atividade. Um rastreamento "Resume" contém um ID de atividade existente cujo último rastreamento emitido da fonte de rastreamento atual foi um rastreamento "Suspender". Os 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 se relacionam com outras, as atividades podem ser relacionadas a outras atividades através de rastreamentos de "Transferência". Uma transferência registra a relação direcionada de uma atividade para outra
Os rastreamentos Start e Stop não são críticos para a correlação. No entanto, eles podem ajudar a aumentar o desempenho, a criação de perfis e a validação do escopo da atividade.
Usando esses tipos, as ferramentas podem otimizar a navegação nos logs de rastreamento para encontrar os eventos imediatamente relacionados da mesma atividade ou eventos em atividades relacionadas se a ferramenta seguir rastreamentos de transferência. Por exemplo, as ferramentas pararão de analisar os logs de uma determinada atividade quando virem um rastreamento Start/Stop.
Esses tipos de rastreamento também podem ser usados para criação de perfil. Os recursos consumidos entre os marcadores de início e de parada representam o tempo inclusivo da atividade, incluindo atividades lógicas contidas. Subtrair os intervalos de tempo entre os rastreamentos Suspender e Retomar fornece o tempo de atividade real.
O Stop trace também é particularmente útil para validar o escopo das atividades implementadas. Se alguns rastreamentos de processamento aparecerem após o rastreamento Stop em vez de dentro de uma determinada atividade, isso pode sugerir um defeito de código.
Diretrizes para o uso do rastreamento de atividades
A seguir está uma diretriz de uso de rastreamentos de ActivityTracing (Start, Stop, Suspend, Resume e Transfer).
O rastreamento é um gráfico cíclico direcionado, não uma árvore. Você pode retornar o controle para uma atividade que gerou uma atividade.
Uma atividade denota 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, (após a conclusão do trabalho) pelo término da nova atividade e pelo retorno à atividade ambiente.
Atividades de longa duração (contínuas), como escutar conexões ou aguardar mensagens, são representadas por marcadores de início/parada correspondentes.
As atividades desencadeadas 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 emissão vestigial significativa)."