Sdílet prostřednictvím


Použití prohlížeče trasování služeb k zobrazení korelovaných tras a řešení problémů

Toto téma popisuje formát dat trasování, jejich zobrazení a přístupy, které k řešení potíží s aplikací používají Prohlížeč trasování služeb.

Použití nástroje Service Trace Viewer

Nástroj Windows Communication Foundation (WCF) Service Trace Viewer pomáhá korelovat diagnostické trasování vytvořené naslouchacími procesy WCF za účelem vyhledání původní příčiny chyby. Nástroj vám umožňuje snadno zobrazit, seskupit a filtrovat trasování, abyste mohli diagnostikovat, opravovat a ověřovat problémy se službami WCF. Další informace o použití tohoto nástroje naleznete v tématu Nástroj sledování trasování služby (SvcTraceViewer.exe).

Toto téma obsahuje snímky obrazovek trasování vygenerovaných spuštěním ukázky trasování a protokolování zpráv při zobrazení pomocí nástroje Service Trace Viewer (SvcTraceViewer.exe). Toto téma ukazuje, jak porozumět trasování obsahu, aktivit a jejich korelaci a jak analyzovat velký počet trasování při řešení potíží.

Zobrazení obsahu trasování

Událost trasování obsahuje následující nejdůležitější informace:

  • Název aktivity při nastavení

  • Doba emisí.

  • Úroveň trasování.

  • Název zdroje trasování

  • Název procesu

  • ID vlákna.

  • Jedinečný identifikátor trasování, což je adresa URL odkazující na technickou referenci microsoftu, která poskytuje další informace týkající se trasování.

Všechny tyto možnosti lze při výběru trasování zobrazit v pravém horním panelu v Prohlížeči trasování služby nebo v části Základní informace ve formátovaném zobrazení pravého dolního panelu.

Poznámka:

Pokud jsou klient a služba na stejném počítači, budou k dispozici trasování obou aplikací. Můžete je filtrovat pomocí sloupce Název procesu.

Kromě toho formátované zobrazení také obsahuje popis trasování a další podrobné informace, pokud jsou k dispozici. Druhá může zahrnovat typ výjimky a zprávu, zásobníky volání, akci zprávy, pole z/do polí a další informace o výjimce.

V zobrazení XML obsahují užitečné značky XML následující:

  • <SubType> (úroveň trasování).

  • <TimeCreated>.

  • <Source> (název zdroje trasování).

  • <Correlation> (ID aktivity nastavené při generování trasování).

  • <Execution> (id procesu a vlákna).

  • <Computer>.

  • <ExtendedData>včetně <Action><MessageID> a <ActivityId> sady v záhlaví zprávy při odesílání zprávy.

Pokud prozkoumáte trasování "Odesláno zprávu přes kanál", může se zobrazit následující obsah.

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
   <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
      <EventID>262163</EventID>
      <Type>3</Type>
      <SubType Name="Information">0</SubType>
      <Level>8</Level>
      <TimeCreated SystemTime="2006-08-04T18:45:30.8491051Z" />
      <Source Name="System.ServiceModel" />
       <Correlation ActivityID="{27c6331d-8998-43aa-a382-03239013a6bd}"/>
       <Execution ProcessName="client" ProcessID="1808" ThreadID="1" />
       <Channel />
       <Computer>TEST1</Computer>
   </System>
   <ApplicationData>
       <TraceData>
          <DataItem>
             <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
                 <TraceIdentifier>http://msdn.microsoft.com/library/System.ServiceModel.Channels.MessageSent.aspx</TraceIdentifier>
                 <Description>Sent a message over a channel.</Description>
                 <AppDomain>client.exe</AppDomain>
                 <Source>System.ServiceModel.Channels.ClientFramingDuplexSessionChannel/35191196</Source>
                <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/MessageTransmitTraceRecord">

                  <MessageProperties>
                     <AllowOutputBatching>False</AllowOutputBatching>
                  </MessageProperties>
                  <MessageHeaders>
                     <Action d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://Microsoft.ServiceModel.Samples/ICalculator/Multiply</Action>
                     <MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:7c6670d8-4c9c-496e-b6a0-2ceb6db35338</MessageID>
                     <ActivityId CorrelationId="b02e2189-0816-4387-980c-dd8e306440f5" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">27c6331d-8998-43aa-a382-03239013a6bd</ActivityId>
                     <ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
                        <Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
                    </ReplyTo>
                    <To d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">net.tcp://localhost/servicemodelsamples/service</To>
                  </MessageHeaders>
                  <RemoteAddress>net.tcp://localhost/servicemodelsamples/service</RemoteAddress>
                </ExtendedData>
            </TraceRecord>
          </DataItem>
       </TraceData>
   </ApplicationData>
</E2ETraceEvent>

Trasování modelu ServiceModel E2E

System.ServiceModel Pokud je zdroj trasování nastaven s switchValue jiným než Vypnuto, a ActivityTracingWCF vytváří aktivity a přenosy pro zpracování WCF.

Aktivita je logická jednotka zpracování, která seskupuje všechna trasování související s danou jednotkou zpracování. Můžete například definovat jednu aktivitu pro každý požadavek. Přenosy vytvářejí kauzální vztah mezi aktivitami v rámci koncových bodů. Rozšíření ID aktivity umožňuje spojit aktivity napříč koncovými body. To lze provést nastavením propagateActivity=true v konfiguraci na každém koncovém bodu. Aktivity, přenosy a šíření umožňují provádět korelaci chyb. Tímto způsobem můžete rychleji najít původní příčinu chyby.

V klientovi se vytvoří jedna aktivita WCF pro každé volání modelu objektu (například Open ChannelFactory, Add, Divide atd.). Každé volání operace se zpracovává v aktivitě Akce procesu.

Na následujícím snímku obrazovky extrahovaný z ukázky trasování a protokolování zpráv na levém panelu se zobrazí seznam aktivit vytvořených v procesu klienta seřazený podle času vytvoření. Následuje chronologický seznam aktivit:

  • Byl vytvořen objekt pro vytváření kanálů (ClientBase).

  • Otevřel objekt pro vytváření kanálů.

  • Zpracoval akci Přidat.

  • Nastavte zabezpečenou relaci (k této chybě došlo při prvním požadavku) a zpracovali tři zprávy odpovědi na infrastrukturu zabezpečení: RST, RSTR, SCT (procesová zpráva 1, 2, 3).

  • Zpracoval požadavky odečítání, násobení a dělení.

  • Zavřete továrnu kanálu a zavřete tak zabezpečenou relaci a zpracovali odpověď na zprávu zabezpečení Zrušit.

Kvůli wsHttpBindingu vidíme zprávy infrastruktury zabezpečení.

Poznámka:

Ve WCF zobrazujeme zprávy odpovědí zpracovávané zpočátku v samostatné aktivitě (zpráva procesu) předtím, než je korelujeme s odpovídající aktivitou akce procesu, která zahrnuje zprávu požadavku prostřednictvím přenosu. K tomu dochází u zpráv infrastruktury a asynchronních požadavků a je příčinou faktu, že musíme zprávu zkontrolovat, přečíst hlavičku activityId a identifikovat existující aktivitu akce procesu s tímto ID, aby se s ní daly korelovat. U synchronních požadavků blokujeme odpověď, a proto víme, ke které akci procesu se odpověď vztahuje.

Následující obrázek znázorňuje aktivity klientů WCF uvedené podle času vytvoření (levého panelu) a jejich vnořených aktivit a trasování (pravý horní panel):

Screenshot showing WCF client activities listed by creation time.

Když vybereme aktivitu na levém panelu, uvidíme na pravém horním panelu vnořené aktivity a trasování. Proto je to omezené hierarchické zobrazení seznamu aktivit vlevo na základě vybrané nadřazené aktivity. Vzhledem k tomu, že vybraná akce Proces Přidat je první požadavek, obsahuje tato aktivita aktivitu Nastavit zabezpečenou relaci (přenos do, přenést zpět) a trasování pro skutečné zpracování akce Přidat.

Pokud dvakrát klikneme na akci Proces Přidat aktivitu na levém panelu, můžeme vidět grafické znázornění aktivit WCF klienta souvisejících s přidáním. První aktivita vlevo je kořenová aktivita (0000), což je výchozí aktivita. WCF se přenese z okolí aktivity. Pokud není definováno, WCF přenese z 0000. Zde se druhá aktivita, přidání akce procesu, přenosy z 0. Pak uvidíme zabezpečenou relaci nastavení.

Následující obrázek znázorňuje zobrazení grafu aktivit klienta WCF, konkrétně okolí aktivity (zde 0), akce procesu a nastavení zabezpečené relace:

Graph in the Trace Viewer showing Ambient Activity and Process action.

Na pravém horním panelu vidíme všechny trasování související s aktivitou Přidání akce procesu. Konkrétně jsme odeslali zprávu požadavku ("Odeslala zprávu přes kanál") a obdrželi jsme odpověď ("Přijato zprávu přes kanál") ve stejné aktivitě. To je znázorněno v následujícím grafu. Pro přehlednost je v grafu sbalená aktivita Nastavit zabezpečenou relaci.

Následující obrázek ukazuje seznam trasování aktivity akce procesu. Požadavek odešleme a obdržíme odpověď ve stejné aktivitě.

Screenshot of Trace Viewer showing a list of traces for the Process Action activity

Zde načteme trasování klienta pouze pro přehlednost, ale trasování služeb (přijaté zprávy požadavku a odeslaná zpráva odpovědi) se zobrazí ve stejné aktivitě, pokud jsou také načteny v nástroji a propagateActivity byla nastavena na true. hodnotu To je znázorněno na pozdějším obrázku.

V této službě se model aktivit mapuje na koncepty WCF následujícím způsobem:

  1. Vytvoříme a otevřeme ServiceHost (v případě zabezpečení může například vytvořit několik aktivit souvisejících s hostitelem).

  2. Vytvoříme aktivitu Listen At pro každý naslouchací proces v ServiceHost (s přenosy in a out of Open ServiceHost).

  3. Když naslouchací proces zjistí komunikační požadavek iniciovaný klientem, přenese se do aktivity "Příjem bajtů", ve které se zpracovávají všechny bajty odeslané z klienta. V této aktivitě vidíme všechny chyby připojení, ke kterým došlo během interakce mezi klientem a službou.

  4. Pro každou sadu bajtů přijatých, která odpovídá zprávě, zpracováváme tyto bajty v aktivitě "Zpráva procesu", kde vytvoříme objekt zprávy WCF. V této aktivitě vidíme chyby související s chybnou obálkou nebo chybnou zprávou.

  5. Po vytvoření zprávy přeneseme do aktivity akce procesu. Pokud propagateActivity je pro klienta i službu nastavená true tato aktivita, má tato aktivita stejné ID jako ID definovaná v klientovi a popsaná dříve. V této fázi začneme těžit z přímé korelace napříč koncovými body, protože všechny trasování generované ve WCF, které souvisí s požadavkem, jsou ve stejné aktivitě, včetně zpracování zprávy odpovědi.

  6. Pro akci mimo proces vytvoříme aktivitu Execute user code (Spustit uživatelský kód), která izoluje trasování vygenerovaná v uživatelském kódu od trasování vygenerovaných ve WCF. V předchozím příkladu se trasování "Service sends Add response" v aktivitě Execute User code ne v aktivitě šířené klientem, pokud je to možné.

Na následujícím obrázku je první aktivita vlevo kořenovou aktivitou (0000), což je výchozí aktivita. Další tři aktivity jsou k otevření ServiceHost. Aktivita ve sloupci 5 je naslouchací proces a zbývající aktivity (6 až 8) popisují zpracování zprávy WCF od zpracování bajtů až po aktivaci uživatelského kódu.

Následující obrázek znázorňuje zobrazení grafu aktivit služeb WCF:

Screenshot of Trace Viewer showing a list of WCF service activities

Následující snímek obrazovky ukazuje aktivity pro klienta i službu a zvýrazní aktivitu Přidání akce procesu mezi procesy (oranžová). Šipky se týkají zpráv požadavků a odpovědí odeslaných a přijatých klientem a službou. Trasování akce procesu je rozděleno mezi procesy v grafu, ale zobrazuje se jako součást stejné aktivity v pravém horním panelu. Na tomto panelu vidíme trasování klientů pro odeslané zprávy následované trasováním služby pro přijaté a zpracovávané zprávy.

Následující obrázky znázorňují zobrazení grafu aktivit klienta WCF i služeb.

Graph from Trace Viewer that shows both WCF client and service activities.

V následujícím chybovém scénáři souvisí trasování chyb a upozornění ve službě a klientovi. V uživatelském kódu ve službě se nejprve vyvolá výjimka (zelená aktivita, která obsahuje trasování upozornění pro výjimku "Služba nemůže zpracovat tento požadavek v uživatelském kódu."). Při odeslání odpovědi klientovi se znovu vygeneruje trasování upozornění, aby se označovala chybová zpráva (růžová aktivita vlevo). Klient pak zavře klienta WCF (žlutá aktivita na levé dolní straně), která přeruší připojení ke službě. Služba vyvolá chybu (nejdelší růžová aktivita vpravo).

Using the Trace Viewer

Korelace chyb napříč službou a klientem

Ukázka použitá k vygenerování těchto trasování je řada synchronních požadavků pomocí wsHttpBinding. Existují odchylky od tohoto grafu pro scénáře bez zabezpečení nebo s asynchronními požadavky, kde aktivita akce procesu zahrnuje počáteční a koncové operace, které tvoří asynchronní volání, a ukazuje přenosy do aktivity zpětného volání. Další informace o dalších scénářích najdete v tématu Kompletní scénáře trasování.

Řešení potíží s využitím prohlížeče trasování služby

Při načítání trasovacích souborů v nástroji Service Trace Viewer můžete vybrat libovolnou červenou nebo žlutou aktivitu na levém panelu a zjistit příčinu problému v aplikaci. Aktivita 000 obvykle obsahuje neošetřené výjimky, které bublinou až na uživatele.

Následující obrázek ukazuje, jak vybrat červenou nebo žlutou aktivitu pro vyhledání kořene problému. Screenshot of red or yellow activities for locating the root of a problem.

Na pravém horním panelu můžete prozkoumat trasování aktivity, kterou jste vybrali na levé straně. Pak můžete na tomto panelu prozkoumat červené nebo žluté trasování a zjistit, jak jsou korelovány. V předchozím grafu vidíme trasování upozornění pro klienta i službu ve stejné aktivitě akce procesu.

Pokud vám tyto trasování nezadáte původní příčinu chyby, můžete graf využít poklikáním na vybranou aktivitu na levém panelu (tady akce Proces). Zobrazí se graf se souvisejícími aktivitami. Potom můžete rozbalit související aktivity (kliknutím na znaménka +) a najít první vygenerované trasování červeně nebo žlutě v související aktivitě. Pokračujte v rozšiřování aktivit, ke kterým došlo těsně před červenou nebo žlutou trasou zájmu, a toky souvisejících aktivit nebo zpráv napříč koncovými body, dokud nesledujete původní příčinu problému.

Using the Trace Viewer

Rozšíření aktivit pro sledování původní příčiny problému

Pokud je serviceModel ActivityTracing vypnutý, ale trasování ServiceModel je zapnuté, můžete zobrazit trasování ServiceModel generované v aktivitě 0000. To ale vyžaduje větší úsilí, aby bylo možné porozumět korelaci těchto trasování.

Pokud je protokolování zpráv povolené, můžete pomocí karty Zpráva zjistit, která zpráva je ovlivněna chybou. Poklikáním na zprávu červeně nebo žlutě zobrazíte zobrazení grafu souvisejících aktivit. Tyto aktivity nejvíce souvisejí s požadavkem, ve kterém došlo k chybě.

Screenshot of Trace Viewer with message logging enabled.

Pokud chcete začít řešit potíže, můžete také vybrat červené nebo žluté trasování zpráv a poklikáním na ni sledovat původní příčinu.

Viz také