Megosztás a következőn keresztül:


A Service Trace Viewer használata korrelált nyomkövetések megtekintéséhez és hibaelhárításhoz

Ez a témakör ismerteti a nyomkövetési adatok formátumát, azok megtekintésének módját, valamint azokat a megközelítéseket, amelyek a Service Trace Viewer használatával elhárítják az alkalmazást.

A Service Trace Viewer eszköz használata

A Windows Communication Foundation (WCF) szolgáltatás nyomkövetési megjelenítő eszköze segít korrelálni a WCF-figyelők által előállított diagnosztikai nyomkövetéseket a hiba kiváltó okának megkereséséhez. Az eszköz lehetővé teszi a nyomkövetések egyszerű megtekintését, csoportosítását és szűrését, így diagnosztizálhatja, kijavíthatja és ellenőrizheti a WCF-szolgáltatásokkal kapcsolatos problémákat. Az eszköz használatáról további információt a Service Trace Viewer tool (SvcTraceViewer.exe) című témakörben talál.

Ez a témakör képernyőképeket tartalmaz a nyomkövetési és üzenetnaplózási minta futtatásával létrehozott nyomkövetésekről, amikor a Service Trace Viewer tool (SvcTraceViewer.exe) használatával tekintik meg. Ez a témakör bemutatja, hogyan értelmezhető a nyomkövetési tartalom, a tevékenységek és azok korrelációja, és hogyan elemezhet nagy mennyiségű nyomkövetést hibaelhárításkor.

Nyomkövetési tartalom megtekintése

A nyomkövetési esemény a következő legfontosabb információkat tartalmazza:

  • Ha be van állítva a tevékenység neve.

  • Kibocsátási idő.

  • Nyomkövetési szint.

  • Nyomkövetési forrás neve.

  • Folyamat neve.

  • Szálazonosító.

  • Egyedi nyomkövetési azonosító, amely egy Olyan URL-cím, amely egy Microsoft-technikai hivatkozásra mutat, amely a nyomkövetéssel kapcsolatos további információkat nyújt.

Ezek mindegyike látható a szolgáltatás nyomkövetési megjelenítőjének jobb felső paneljén, illetve a jobb alsó panel formázott nézetének Alapadatok szakaszában a nyomkövetés kiválasztásakor.

Feljegyzés

Ha az ügyfél és a szolgáltatás ugyanazon a gépen található, mindkét alkalmazás nyomkövetése jelen lesz. Ezek a Folyamatnév oszlop használatával szűrhetők.

Emellett a formázott nézet leírást is tartalmaz a nyomkövetésről, és ha elérhető, további részletes információkat is tartalmaz. Ez utóbbi tartalmazhat kivételtípust és üzenetet, hívásveremeket, üzenetműveleteket, mezőket és egyéb kivételadatokat.

XML-nézetben a hasznos XML-címkék a következők:

  • <SubType> (nyomkövetési szint).

  • <TimeCreated>.

  • <Source> (nyomkövetési forrás neve).

  • <Correlation> (a nyomkövetés kibocsátásakor beállított tevékenységazonosító).

  • <Execution> (folyamat- és szálazonosító).

  • <Computer>.

  • <ExtendedData>, beleértve <Action><MessageID> az <ActivityId> üzenet fejlécében lévő készletet is, amikor üzenetet küld.

Ha megvizsgálja az "Üzenet küldése csatornán keresztül" nyomkövetést, a következő tartalom jelenhet meg.

<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>

ServiceModel E2E-nyomkövetés

Ha a nyomkövetési System.ServiceModel forrás beállítása nem ki van kapcsolva switchValue , és ActivityTracinga WCF tevékenységeket és átviteleket hoz létre a WCF-feldolgozáshoz.

A tevékenység egy logikai feldolgozási egység, amely az adott feldolgozási egységhez kapcsolódó összes nyomkövetést csoportosítja. Megadhat például egy tevékenységet minden egyes kéréshez. Az átvitelek okozati kapcsolatot hoznak létre a végpontokon belüli tevékenységek között. A tevékenységazonosító propagálása lehetővé teszi a tevékenységek végpontok közötti összekapcsolását. Ezt úgy teheti meg, hogy minden végponton konfigurálja propagateActivity=true a konfigurációt. A tevékenységek, az átvitelek és a propagálás lehetővé teszik a hibakorreláció végrehajtását. Így gyorsabban megtalálhatja a hiba kiváltó okát.

Az ügyfélen minden objektummodell-híváshoz egy WCF-tevékenység jön létre (például Open ChannelFactory, Add, Divide stb.) A művelethívások feldolgozása "Folyamatművelet" tevékenységben történik.

A nyomkövetési és üzenetnaplózási mintából kinyert alábbi képernyőképen a bal oldali panel megjeleníti az ügyfélfolyamatban létrehozott tevékenységek listáját a létrehozási idő szerint rendezve. A tevékenységek időrendi listája a következő:

  • A channel factory (ClientBase) létrehozása.

  • Megnyitotta a csatornagyárat.

  • Feldolgozta a Hozzáadás műveletet.

  • Állítsa be a biztonságos munkamenetet (ez az első kérés során történt), és feldolgozta a következő három biztonsági infrastruktúra-válaszüzenetet: RST, RSTR, SCT (1., 2. és 3. folyamatüzenet).

  • Feldolgozta a kivonási, szorzási és osztási kéréseket.

  • Bezárta a csatorna-előállítót, és ezzel bezárta a biztonságos munkamenetet, és feldolgozta a Mégse biztonsági üzenetre adott választ.

A biztonsági infrastruktúra üzenetei a wsHttpBinding miatt láthatók.

Feljegyzés

A WCF-ben azt jelenítjük meg, hogy a válaszüzenetek feldolgozása kezdetben külön tevékenységben történik (folyamatüzenet), mielőtt egy átvitelen keresztül korrelálnánk azokat a megfelelő folyamatműveleti tevékenységhez, amely tartalmazza a kérési üzenetet. Ez az infrastruktúra-üzenetek és az aszinkron kérések esetében fordul elő, és ennek az az oka, hogy meg kell vizsgálnunk az üzenetet, be kell olvasnunk az activityId fejlécet, és azonosítani kell a meglévő folyamatműveleti tevékenységet azzal az azonosítóval, hogy korreláljunk vele. Szinkron kérések esetén blokkoljuk a választ, és így tudjuk, hogy a válasz melyik folyamatművelethez kapcsolódik.

Az alábbi képen a WCF-ügyféltevékenységek a létrehozási idő (bal oldali panel) és beágyazott tevékenységeik és nyomkövetéseik (jobb felső panel) szerint láthatók:

Screenshot showing WCF client activities listed by creation time.

Amikor kiválasztunk egy tevékenységet a bal oldali panelen, a jobb felső panelen beágyazott tevékenységeket és nyomkövetéseket láthatunk. Ezért ez a bal oldali tevékenységek listájának csökkentett hierarchikus nézete a kiválasztott szülőtevékenység alapján. Mivel a kiválasztott Folyamat hozzáadása művelet az első kérés, ez a tevékenység tartalmazza a Biztonságos munkamenet beállítása tevékenységet (átvitel, visszaküldés innen), valamint a Hozzáadás művelet tényleges feldolgozásának nyomkövetését.

Ha a bal oldali panelen duplán a Folyamat művelet Tevékenység hozzáadása elemre kattintunk, a Hozzáadáshoz kapcsolódó ügyfél WCF-tevékenységek grafikus megjelenítése jelenik meg. A bal oldali első tevékenység a gyökértevékenység (0000), amely az alapértelmezett tevékenység. A WCF kiviszi a környezeti tevékenységből. Ha ez nincs meghatározva, a WCF 0000-ből végez átvitelt. Itt a második tevékenység, a Folyamatművelet hozzáadása 0-ból végzi az átvitelt. Ezután megjelenik a Biztonságos munkamenet beállítása.

Az alábbi képen a WCF-ügyféltevékenységek gráfnézete látható, különösen a környezeti tevékenység (itt 0), a folyamatművelet és a biztonságos munkamenet beállítása:

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

A jobb felső panelen látható a Folyamatművelet hozzáadása tevékenységhez kapcsolódó összes nyomkövetés. Pontosabban elküldtük a kérési üzenetet ("Üzenet küldése egy csatornán keresztül"), és ugyanabban a tevékenységben megkaptuk a választ ("Üzenet érkezett egy csatornán keresztül"). Ez az alábbi grafikonon látható. Az egyértelműség kedvéért a Biztonságos munkamenet beállítása tevékenység össze van csukva a gráfban.

Az alábbi képen a Folyamatművelet tevékenység nyomkövetési listája látható. Elküldjük a kérést, és ugyanabban a tevékenységben kapjuk meg a választ.

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

Itt csak az egyértelműség kedvéért töltjük be az ügyfél nyomkövetéseit, de a szolgáltatás nyomkövetései (a fogadott kérések és a válaszüzenetek) ugyanabban a tevékenységben jelennek meg, ha az eszközbe is betöltve vannak, és propagateActivity az Ez értékre van állítva true. egy későbbi ábrán.

A szolgáltatásban a tevékenységmodell az alábbiak szerint képezi le a WCF-fogalmakat:

  1. Létrehozunk és megnyitunk egy ServiceHostot (ez több gazdagéphez kapcsolódó tevékenységet is létrehozhat, például biztonság esetén).

  2. Létrehozunk egy figyelési tevékenységet a ServiceHost minden egyes figyelője számára (az Open ServiceHost-ban és azon kívül történő átvitelekkel).

  3. Amikor a figyelő észlel egy, az ügyfél által kezdeményezett kommunikációs kérést, az átkerül egy "Bájtok fogadása" tevékenységre, amelyben az ügyféltől küldött összes bájt feldolgozása történik. Ebben a tevékenységben minden olyan csatlakozási hibát láthatunk, amely az ügyfél-szolgáltatás interakciója során történt.

  4. Az üzenetnek megfelelő bájtok minden egyes halmazához feldolgozzuk ezeket a bájtokat egy "Üzenet feldolgozása" tevékenységben, ahol létrehozzuk a WCF Üzenet objektumot. Ebben a tevékenységben egy hibás borítékkal vagy hibásan formázott üzenettel kapcsolatos hibákat látunk.

  5. Az üzenet létrehozása után átkerülünk egy folyamatműveleti tevékenységbe. Ha propagateActivity az ügyfélen és a szolgáltatáson is be van állítva true , akkor ez a tevékenység ugyanazzal az azonosítóval rendelkezik, mint az ügyfélben definiált, korábban ismertetett azonosító. Ettől a fázistól kezdve a végpontok közötti közvetlen korreláció előnyeit élvezzük, mivel a kérelemhez kapcsolódó WCF-ben kibocsátott összes nyomkövetés ugyanabban a tevékenységben van, beleértve a válaszüzenet feldolgozását is.

  6. A folyamaton kívüli művelethez létrehozunk egy "Felhasználói kód végrehajtása" tevékenységet, amely elkülöníti a felhasználói kódban kibocsátott nyomkövetéseket a WCF-ben kibocsátottaktól. Az előző példában a "Szolgáltatás válasz hozzáadása" nyomkövetés nem az ügyfél által propagált tevékenységben, hanem a "Felhasználói kód végrehajtása" tevékenységben lesz kibocsátva, ha van ilyen.

Az alábbi ábrán a bal oldali első tevékenység a gyökértevékenység (0000), amely az alapértelmezett tevékenység. A következő három tevékenység a ServiceHost megnyitása. Az 5. oszlopban található tevékenység a figyelő, a fennmaradó tevékenységek (6–8) pedig egy üzenet WCF-feldolgozását írják le a bájtok feldolgozásától a felhasználói kód aktiválásig.

Az alábbi képen a WCF szolgáltatás tevékenységeinek gráfnézete látható:

Screenshot of Trace Viewer showing a list of WCF service activities

Az alábbi képernyőkép az ügyfél és a szolgáltatás tevékenységeit mutatja be, és kiemeli a folyamatművelet-hozzáadási tevékenységet a folyamatok között (narancssárga). A nyilak az ügyfél és a szolgáltatás által küldött és fogadott kérés- és válaszüzeneteket kapcsolják össze. A folyamatművelet nyomait a gráf folyamatai választják el egymástól, de a jobb felső panelen ugyanazon tevékenység részeként jelennek meg. Ebben a panelen láthatjuk az elküldött üzenetek ügyfél-nyomkövetéseit, majd a fogadott és feldolgozott üzenetek szolgáltatási nyomkövetéseit.

Az alábbi képek a WCF-ügyfél- és szolgáltatástevékenységek gráfnézetét mutatják be

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

A következő hibaforgatókönyvben a szolgáltatás és az ügyfél hiba- és figyelmeztetési nyomkövetései kapcsolódnak. A rendszer először kivételt küld a szolgáltatás felhasználói kódjában (a jobb szélső zöld tevékenység a "A szolgáltatás nem tudja feldolgozni ezt a kérést a felhasználói kódban" kivételhez tartozó figyelmeztetési nyomkövetést tartalmaz). Amikor a rendszer elküldi a választ az ügyfélnek, a rendszer ismét figyelmeztető nyomkövetést ad ki a hibaüzenet jelölésére (a bal oldali rózsaszín tevékenység). Az ügyfél ezután bezárja a WCF-ügyfelet (sárga tevékenység a bal alsó oldalon), ami megszakítja a kapcsolatot a szolgáltatással. A szolgáltatás hibát jelez (a leghosszabb rózsaszín tevékenység a jobb oldalon).

Using the Trace Viewer

Hiba korreláció a szolgáltatás és az ügyfél között

A nyomkövetések létrehozásához használt minta szinkron kérések sorozata a wsHttpBinding használatával. A gráftól eltérnek a biztonsági vagy aszinkron kérések nélküli forgatókönyvek esetében, ahol a folyamatműveleti tevékenység magában foglalja az aszinkron hívást alkotó kezdő és befejező műveleteket, és megjeleníti a visszahívási tevékenységbe történő átviteleket. További információk a további forgatókönyvekről: Végpontok közötti nyomkövetési forgatókönyvek.

Hibaelhárítás a Service Trace Viewer használatával

Ha nyomkövetési fájlokat tölt be a Service Trace Viewer eszközbe, a bal oldali panelen bármelyik piros vagy sárga tevékenységet kiválaszthatja a probléma okának nyomon követéséhez az alkalmazásban. A 000 tevékenység általában kezeletlen kivételekkel rendelkezik, amelyek felborulnak a felhasználóra.

Az alábbi képen látható, hogyan jelölhet ki egy piros vagy sárga tevékenységet a probléma gyökerének megkereséséhez. Screenshot of red or yellow activities for locating the root of a problem.

A jobb felső panelen megvizsgálhatja a bal oldalon kiválasztott tevékenység nyomkövetéseit. Ezután megvizsgálhatja a piros vagy sárga nyomokat a panelen, és megtekintheti azok korrelációját. Az előző grafikonon figyelmeztető nyomkövetések láthatók az ügyfél és a szolgáltatás esetében ugyanabban a folyamatműveleti tevékenységben.

Ha ezek a nyomkövetések nem adják meg a hiba kiváltó okát, akkor a bal oldali panelen duplán kattintva használhatja a gráfot (itt a Folyamat művelet). Ekkor megjelenik a kapcsolódó tevékenységeket tartalmazó gráf. Ezután kibonthatja a kapcsolódó tevékenységeket (a "+" jelekre kattintva), hogy megtalálja az első kibocsátott nyomkövetést piros vagy sárga színnel egy kapcsolódó tevékenységben. A piros vagy sárga érdeklődési kör előtt végzett tevékenységek kibontása, a kapcsolódó tevékenységekre vagy üzenetekre irányuló átvitelek végpontok közötti átvitele után, amíg nyomon nem követi a probléma kiváltó okát.

Using the Trace Viewer

Tevékenységek bővítése a probléma kiváltó okának nyomon követéséhez

Ha a ServiceModel ActivityTracing ki van kapcsolva, de a ServiceModel nyomkövetés be van kapcsolva, a 0000 tevékenységben kibocsátott ServiceModel-nyomkövetések láthatók. Ez azonban több erőfeszítést igényel ezeknek a nyomoknak a korrelációjának megértéséhez.

Ha az üzenetnaplózás engedélyezve van, az Üzenet lapon láthatja, hogy melyik üzenetet érinti a hiba. Ha duplán kattint egy piros vagy sárga színű üzenetre, láthatja a kapcsolódó tevékenységek gráfnézetét. Ezek a tevékenységek kapcsolódnak a legszorosabban ahhoz a kéréshez, amelyben hiba történt.

Screenshot of Trace Viewer with message logging enabled.

A hibaelhárítás megkezdéséhez választhat egy piros vagy sárga üzenetkövetést is, és duplán kattintva nyomon követheti a kiváltó okot.

Lásd még