Udostępnij za pośrednictwem


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.

Zobacz też