Propagazione
In questo argomento viene descritta la propagazione delle attività nel modello di traccia di Windows Communication Foundation (WCF).
Utilizzo della propagazione per correlare attività attraverso endpoint
La propagazione fornisce all'utente con correlazione diretta delle tracce di errore per la stessa unità di elaborazione attraverso 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 attraverso domini applicazione. Questa operazione viene eseguita tramite la propagazione dell'ID attività nelle intestazioni del messaggio. Se, pertanto, un client va in timeout a causa di un errore interno nel server, entrambi gli errori vengono visualizzati nella stessa attività per la correlazione diretta.
A tale scopo, utilizzare l'impostazione ActivityTracing come illustrato nell'esempio precedente. Impostare inoltre l'attributo propagateActivity per l'origine di traccia System.ServiceModel in tutti gli endpoint.
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity=”true” >
La propagazione dell'attività è una funzionalità configurabile che fa sì che WCF aggiunga un'intestazione ai messaggi in uscita, compreso l'ID attività in TLS. Includendo questa intestazione nelle tracce successive lato server, è possibile correlare le attività di 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
- Il gAId di M è conosciuto 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 di 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="f94c6af1-7d5d-4295-b693-4670a8a0ce34"
xmlns="https://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 della propagazione e dell'attività
Quando l'ID attività viene propagato attraverso endpoint, il destinatario del messaggio emette tracce Start e Stop con quell'ID attività (propagato). Esiste pertanto una traccia Start e Stop con quel gAId da ogni origine di traccia. Se gli endpoint sono nello stesso processo e utilizzano 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 eventi attraverso endpoint che vengono eseguiti in computer diversi, ad esempio messaggio inviato/messaggio ricevuto, viene aggiunto un CorrelationId all'intestazione ActivityId propagata nei messaggi. Gli strumenti possono utilizzare questo ID per sincronizzare gli eventi attraverso computer con discrepanza dell'orologio. Nello specifico, lo strumento Visualizzatore delle tracce dei servizi utilizza questo ID per visualizzare i flussi dei messaggi tra endpoint.
Vedere anche
Concetti
Configurazione delle funzionalità di traccia
Utilizzo del visualizzatore di tracce dei servizi per la visualizzazione di tracce correlate e risoluzione dei problemi
Scenari di analisi end-to-end