Condividi tramite


Propagazione

In questo argomento viene descritta la propagazione delle attività nel modello di traccia di Windows Communication Foundation (WCF).

Uso della propagazione per correlare le attività tra endpoint

La propagazione fornisce all'utente la correlazione diretta delle tracce di errore per la stessa unità di elaborazione tra gli endpoint dell'applicazione, ad esempio una richiesta. Gli errori generati in endpoint diversi per la stessa unità di elaborazione vengono raggruppati nella stessa attività, anche tra domini applicazione. Questa operazione viene eseguita tramite la propagazione dell'ID dell'attività nelle intestazioni del messaggio. Pertanto, se si verifica il timeout di un client a causa di un errore interno nel server, entrambi gli errori vengono visualizzati nella stessa attività per la correlazione diretta.

A tale scopo, usare l'impostazione ActivityTracing come illustrato nell'esempio precedente. Inoltre, configurare l'attributo propagateActivity per la fonte System.ServiceModel traccia in tutti gli endpoint.

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

La propagazione delle attività è una funzionalità configurabile che fa sì che WCF aggiunga un'intestazione ai messaggi in uscita, che include l'ID attività in TLS. Includendo le tracce successive sul lato server, è possibile correlare le attività client e server.

Definizione di propagazione

Il gAId dell'attività M viene propagato all'attività N se si applicano tutte le condizioni seguenti.

  • N viene creato a causa di M

  • GAId di M è noto a N

  • Il gAId di N è uguale al gAId di M.

Il gAId viene propagato tramite l'intestazione del messaggio ActivityId, come illustrato nello schema XML seguente.

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

Di seguito è riportato un esempio dell'intestazione del messaggio.

<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="aaaa0000-bb11-2222-33cc-444444dddddd"
               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>  

Limiti di propagazione e attività

Quando l'ID attività viene propagato tra gli endpoint, chi riceve il messaggio emette un tracciamento di inizio e fine con l'ID attività propagato. Di conseguenza, è presente una traccia Start e Stop con tale gAId da ogni origine di traccia. Se gli endpoint si trovano nello stesso processo e usano lo stesso nome di origine di traccia, vengono creati più start e stop con lo stesso lAId (stesso gAId, stessa origine di traccia, stesso processo).

Sincronizzazione

Per sincronizzare gli eventi tra endpoint eseguiti in computer diversi, viene aggiunto un CorrelationId all'intestazione ActivityId propagata nei messaggi. Gli strumenti possono usare questo ID per sincronizzare gli eventi tra computer con discrepanza di clock. In particolare, lo strumento Visualizzatore traccia del servizio usa questo ID per visualizzare i flussi di messaggi tra endpoint.

Vedere anche