Partilhar via


Propagação

Este tópico descreve a propagação de atividades no modelo de rastreamento do Windows Communication Foundation (WCF).

Usando a propagação para correlacionar atividades entre pontos de extremidade

A propagação fornece ao usuário uma correlação direta de rastreamentos de erros para a mesma unidade de processamento entre pontos de extremidade do aplicativo, por exemplo, uma solicitação. Os erros emitidos em diferentes pontos de extremidade para a mesma unidade de processamento são agrupados na mesma atividade, mesmo entre domínios de aplicativo. Isso é feito através da propagação do ID da atividade nos cabeçalhos das mensagens. Portanto, se um cliente atingir o tempo limite devido a um erro interno no servidor, ambos os erros aparecerão na mesma atividade para correlação direta.

Para fazer isso, use a ActivityTracing configuração como demonstrado no exemplo anterior. Além disso, defina o propagateActivity atributo para a fonte de System.ServiceModel rastreamento em todos os pontos de extremidade.

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

A propagação de atividade é um recurso configurável que faz com que o WCF adicione um cabeçalho às mensagens de saída, o que inclui o ID da atividade no TLS. Ao incluir isso em rastreamentos subsequentes no lado do servidor, podemos correlacionar as atividades do cliente e do servidor.

Definição de propagação

O gAId da atividade M é propagado para a atividade N se todas as condições a seguir se aplicarem.

  • N é criado por causa de M

  • O gAId de M é conhecido por N

  • O gAId de N é igual ao gAId de M.

O gAId é propagado através do cabeçalho da mensagem ActivityId, conforme ilustrado no esquema XML a seguir.

<xsd:element name="ActivityId" type="integer" minOccurs="0">  
  <xsd:attribute name="CorrelationId" type="integer" minOccurs="0"/>  
</xsd:element>  

Segue-se um exemplo do cabeçalho da mensagem.

<MessageLogTraceRecord>  
  <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
                      xmlns:a="http://www.w3.org/2005/08/addressing">  
    <s:Header>  
      <a:Action s:mustUnderstand="1">http://Microsoft.ServiceModel.Samples/ICalculator/Subtract  
      </a:Action>  
      <a:MessageID>urn:uuid:f0091eae-d339-4c7e-9408-ece34602f1ce  
      </a:MessageID>  
      <ActivityId CorrelationId="f94c6af1-7d5d-4295-b693-4670a8a0ce34"
               xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">  
        17f59a29-b435-4a15-bf7b-642ffc40eac8  
      </ActivityId>  
      <a:ReplyTo>  
          <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>  
      </a:ReplyTo>  
      <a:To s:mustUnderstand="1">net.tcp://localhost/servicemodelsamples/service</a:To>  
   </s:Header>  
   <s:Body>  
     <Subtract xmlns="http://Microsoft.ServiceModel.Samples">  
       <n1>145</n1>  
       <n2>76.54</n2>  
     </Subtract>  
   </s:Body>  
  </s:Envelope>  
</MessageLogTraceRecord>  

Limites de propagação e atividade

Quando o ID de atividade é propagado entre pontos de extremidade, o recetor da mensagem emite um rastreio Start e Stop com esse ID de atividade (propagado). Portanto, há um rastreamento Start e Stop com esse gAId de cada fonte de rastreamento. Se os pontos de extremidade estiverem no mesmo processo e usarem o mesmo nome de origem de rastreamento, vários Start e Stop com o mesmo lAId (mesmo gAId, mesma fonte de rastreamento, mesmo processo) serão criados.

Sincronização

Para sincronizar eventos entre pontos de extremidade executados em máquinas diferentes, um CorrelationId é adicionado ao cabeçalho ActivityId que é propagado em mensagens. As ferramentas podem usar esse ID para sincronizar eventos entre máquinas com discrepância de relógio. Especificamente, a ferramenta Visualizador de Rastreamento de Serviço usa essa ID para mostrar fluxos de mensagens entre pontos de extremidade.

Consulte também