Propagacja
W tym temacie opisano propagację działań w modelu śledzenia programu Windows Communication Foundation (WCF).
Używanie propagacji do korelowania działań między punktami końcowymi
Propagacja zapewnia użytkownikowi bezpośrednią korelację śladów błędów dla tej samej jednostki przetwarzania w punktach końcowych aplikacji, na przykład żądanie. Błędy emitowane w różnych punktach końcowych dla tej samej jednostki przetwarzania są grupowane w tym samym działaniu, nawet w różnych domenach aplikacji. Odbywa się to przez propagację identyfikatora działania w nagłówkach komunikatów. W związku z tym, jeśli klient upłynął z powodu błędu wewnętrznego na serwerze, oba błędy pojawiają się w tym samym działaniu w przypadku bezpośredniej korelacji.
W tym celu użyj ActivityTracing
ustawienia, jak pokazano w poprzednim przykładzie. Ponadto należy ustawić propagateActivity
atrybut źródła System.ServiceModel
śledzenia we wszystkich punktach końcowych.
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity="true" >
Propagacja działań to konfigurowalna funkcja, która powoduje, że program WCF dodaje nagłówek do komunikatów wychodzących, który zawiera identyfikator działania w protokole TLS. Uwzględniając to w kolejnych śladach po stronie serwera, możemy skorelować działania klienta i serwera.
Definicja propagacji
Identyfikator gAId działania M jest propagowany do działania N, jeśli mają zastosowanie wszystkie poniższe warunki.
N jest tworzony z powodu języka M
Identyfikator gAId języka M jest znany N
Identyfikator gAId N jest równy identyfikatorowi gAId języka M.
Identyfikator gAId jest propagowany za pośrednictwem nagłówka komunikatu ActivityId, jak pokazano w poniższym schemacie XML.
<xsd:element name="ActivityId" type="integer" minOccurs="0">
<xsd:attribute name="CorrelationId" type="integer" minOccurs="0"/>
</xsd:element>
Poniżej przedstawiono przykład nagłówka komunikatu.
<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>
Propagacja i granice działań
Gdy identyfikator działania jest propagowany między punktami końcowymi, odbiorca komunikatu emituje ślady uruchamiania i zatrzymywania za pomocą tego (propagowanego) identyfikatora działania. W związku z tym istnieje ślad uruchamiania i zatrzymywania z tym identyfikatorem gAId z każdego źródła śledzenia. Jeśli punkty końcowe znajdują się w tym samym procesie i używają tej samej nazwy źródła śledzenia, zostanie utworzonych wiele parametrów Start i Stop z tym samym identyfikatorem lAId (tym samym identyfikatorem gAId, tym samym źródłem śledzenia, tym samym procesem).
Synchronizacja
Aby zsynchronizować zdarzenia między punktami końcowymi uruchomionymi na różnych maszynach, do nagłówka ActivityId propagowanego w komunikatach jest dodawany identyfikator CorrelationId. Narzędzia mogą używać tego identyfikatora do synchronizowania zdarzeń między maszynami z rozbieżnością zegara. W szczególności narzędzie Podgląd śledzenia usługi używa tego identyfikatora do wyświetlania przepływów komunikatów między punktami końcowymi.