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 ActivityTracing
a 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:
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:
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.
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:
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).
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).
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.
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.
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ítvatrue
, 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.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ó:
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
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).
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.
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.
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.
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.