Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Cette rubrique décrit la propagation d’activités dans le modèle de suivi Windows Communication Foundation (WCF).
Utilisation de la propagation pour mettre en corrélation les activités entre les points de terminaison
La propagation fournit à l’utilisateur une corrélation directe des traces d’erreurs pour la même unité de traitement entre les points de terminaison d’application, par exemple une demande. Les erreurs émises à différents points de terminaison pour la même unité de traitement sont regroupées dans la même activité, même entre les domaines d’application. Cette opération est effectuée via la propagation de l’ID d’activité dans les en-têtes de message. Par conséquent, si un client expire en raison d’une erreur interne dans le serveur, les deux erreurs apparaissent dans la même activité pour la corrélation directe.
Pour ce faire, utilisez le ActivityTracing paramètre comme illustré dans l’exemple précédent. En outre, définissez l'attribut propagateActivity pour la source de trace System.ServiceModel à tous les points de terminaison.
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity="true" >
La propagation d’activité est une fonctionnalité configurable qui entraîne WCF à ajouter un en-tête aux messages sortants, et qui inclut l'ID d’activité dans l'en-tête TLS. En incluant cela sur les traces suivantes côté serveur, nous pouvons mettre en corrélation les activités du client et du serveur.
Définition de propagation
L'identifiant gAId de l’activité M est propagé à l’activité N si toutes les conditions suivantes s’appliquent.
N est créé en raison de M
Le gAId de M est connu de N
L'identifiant gAId de N est égal à l'identifiant gAId de M.
Le gAId est propagé via l’en-tête de message ActivityId, comme illustré dans le schéma XML suivant.
<xsd:element name="ActivityId" type="integer" minOccurs="0">
<xsd:attribute name="CorrelationId" type="integer" minOccurs="0"/>
</xsd:element>
Voici un exemple d’en-tête de message.
<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>
Limites de propagation et d’activité
Lorsque l’ID d’activité est propagé sur les points de terminaison, le récepteur de messages émet une trace de démarrage et d’arrêt avec cet ID d’activité (propagé). Par conséquent, il y a un suivi de démarrage et d'arrêt avec ce gAId à partir de chaque source de suivi. Si les points de terminaison se trouvent dans le même processus et utilisent le même nom de source de trace, plusieurs démarrages et arrêts avec le même lAId (même gAId, même source de trace, même processus) sont créés.
Synchronisation
Pour synchroniser des événements sur les points de terminaison qui s’exécutent sur des ordinateurs différents, CorrelationId est ajouté à l’en-tête ActivityId propagé dans les messages. Les outils peuvent utiliser cet ID pour synchroniser les événements entre les ordinateurs avec des différences d’horloge. Plus précisément, l’outil Visionneuse de trace de service utilise cet ID pour afficher les flux de messages entre les points de terminaison.