Delen via


Service Trace Viewer gebruiken voor het weergeven van gecorreleerde traceringen en probleemoplossing

In dit onderwerp wordt de indeling van traceringsgegevens beschreven, hoe u deze kunt bekijken en benaderingen die de Service Trace Viewer gebruiken om problemen met uw toepassing op te lossen.

Het hulpprogramma Service Trace Viewer gebruiken

Met het hulpprogramma WCF-servicetraceringsviewer (Windows Communication Foundation) kunt u diagnostische traceringen die door WCF-listeners worden geproduceerd, correleren om de hoofdoorzaak van een fout te vinden. Met het hulpprogramma kunt u eenvoudig traceringen weergeven, groeperen en filteren, zodat u problemen met WCF-services kunt diagnosticeren, herstellen en verifiëren. Zie het hulpprogramma Service Trace Viewer (SvcTraceViewer.exe) voor meer informatie over het gebruik van dit hulpprogramma.

Dit onderwerp bevat schermopnamen van traceringen die worden gegenereerd door het voorbeeld tracering en berichtregistratie uit te voeren, wanneer ze worden weergegeven met het hulpprogramma Service Trace Viewer (SvcTraceViewer.exe). In dit onderwerp wordt gedemonstreerd hoe u traceringsinhoud, activiteiten en hun correlatie begrijpt en hoe u grote aantallen traceringen analyseert bij het oplossen van problemen.

Traceringsinhoud weergeven

Een traceringsevenement bevat de volgende belangrijke informatie:

  • Activiteitsnaam wanneer deze is ingesteld.

  • Emissietijd.

  • Traceerniveau.

  • Bronnaam traceren.

  • Procesnaam.

  • Thread-id.

  • Een unieke tracerings-id, een URL die verwijst naar een technische naslaginformatie van Microsoft die meer informatie over de tracering biedt.

Al deze kunnen worden weergegeven in het rechterbovenhoekvenster in de Service Trace Viewer of in de sectie Basisinformatie in de opgemaakte weergave van het deelvenster rechtsonder bij het selecteren van een tracering.

Notitie

Als de client en de service zich op dezelfde computer bevinden, zijn de traceringen voor beide toepassingen aanwezig. Deze kunnen worden gefilterd met behulp van de kolom Procesnaam .

Daarnaast biedt de opgemaakte weergave ook een beschrijving voor de tracering en aanvullende gedetailleerde informatie, indien beschikbaar. De laatste kan uitzonderingstype en -bericht omvatten, aanroepstacks, berichtactie, van/naar velden en andere informatie over uitzonderingen.

In de XML-weergave zijn nuttige XML-tags het volgende:

  • <SubType> (traceerniveau).

  • <TimeCreated>.

  • <Source> (bronnaam traceren).

  • <Correlation> (activiteits-id ingesteld bij het verzenden van de tracering).

  • <Execution> (proces- en thread-id).

  • <Computer>.

  • <ExtendedData>, inclusief <Action>en <MessageID> de <ActivityId> set in de berichtkop bij het verzenden van een bericht.

Als u de tracering Verzonden via een kanaal bekijkt, ziet u mogelijk de volgende inhoud.

<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="{bbbb1111-cc22-3333-44dd-555555eeeeee}"/>
       <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="aaaa0000-bb11-2222-33cc-444444dddddd" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">bbbb1111-cc22-3333-44dd-555555eeeeee</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-tracering

Wanneer de System.ServiceModel traceringsbron is ingesteld met een switchValue andere bron dan Uit en ActivityTracing, maakt WCF activiteiten en overdrachten voor WCF-verwerking.

Een activiteit is een logische verwerkingseenheid die alle traceringen groepeert die betrekking hebben op die verwerkingseenheid. U kunt bijvoorbeeld één activiteit definiëren voor elke aanvraag. Overdrachten maken een causale relatie tussen activiteiten binnen eindpunten. Door de activiteits-id door te geven, kunt u activiteiten aan verschillende eindpunten koppelen. Dit kan worden gedaan door de configuratie op elk eindpunt in te stellen propagateActivity=true . Met activiteiten, overdrachten en doorgifte kunt u foutcorrelatie uitvoeren. Op deze manier kunt u de hoofdoorzaak van een fout sneller vinden.

Op de client wordt één WCF-activiteit gemaakt voor elke aanroep van het objectmodel (bijvoorbeeld Open ChannelFactory, Add, Divide, enzovoort).) Elk van de bewerkingsoproepen wordt verwerkt in een actie Procesactie.

In de volgende schermopname, geëxtraheerd uit het voorbeeld van tracering en berichtregistratie , wordt in het linkerdeelvenster de lijst weergegeven met activiteiten die zijn gemaakt in het clientproces, gesorteerd op aanmaaktijd. Hier volgt een chronologische lijst met activiteiten:

  • De kanaalfactory (ClientBase) is gebouwd.

  • De kanaalfactory is geopend.

  • De actie Toevoegen is verwerkt.

  • Stel de beveiligde sessie in (dit IS OPGETREDEN op de eerste aanvraag) en verwerkt drie antwoordberichten voor de beveiligingsinfrastructuur: RST, RSTR, SCT (procesbericht 1, 2, 3).

  • De aanvragen aftrekken, vermenigvuldigen en delen verwerkt.

  • Sluit de kanaalfactory en sluit de beveiligde sessie en verwerkt het antwoord van het beveiligingsbericht annuleren.

We zien de beveiligingsinfrastructuurberichten vanwege de wsHttpBinding.

Notitie

In WCF tonen we antwoordberichten die in eerste instantie in een afzonderlijke activiteit (procesbericht) worden verwerkt voordat we deze correleren met de bijbehorende activiteit procesactie die het aanvraagbericht omvat, via een overdracht. Dit gebeurt voor infrastructuurberichten en asynchrone aanvragen en is het gevolg van het feit dat we het bericht moeten inspecteren, de activityId-header moeten lezen en de bestaande activiteit procesactie met die id moeten identificeren om deze te correleren. Voor synchrone aanvragen blokkeren we het antwoord en daarom weten we met welke procesactie het antwoord betrekking heeft.

In de volgende afbeelding ziet u WCF-clientactiviteiten die worden vermeld door de aanmaaktijd (linkerdeelvenster) en hun geneste activiteiten en traceringen (deelvenster rechtsboven):

Screenshot showing WCF client activities listed by creation time.

Wanneer we een activiteit selecteren in het linkerdeelvenster, zien we geneste activiteiten en traceringen in het deelvenster rechtsboven. Daarom is dit een beperkte hiërarchische weergave van de lijst met activiteiten aan de linkerkant, op basis van de geselecteerde bovenliggende activiteit. Omdat de geselecteerde actie Proces toevoegen de eerste aanvraag is, bevat deze activiteit de activiteit Beveiligde sessie instellen (overdragen naar, terugverbinden van) en traceringen voor de werkelijke verwerking van de actie Toevoegen.

Als we dubbelklikken op de activiteit Procesactie Toevoegen in het linkerdeelvenster, zien we een grafische weergave van de WCF-activiteiten van de client met betrekking tot Toevoegen. De eerste activiteit aan de linkerkant is de hoofdactiviteit (0000), de standaardactiviteit. WCF-overdrachten buiten de omgevingsactiviteit. Als dit niet is gedefinieerd, worden WCF-overdrachten van 0000 overgedragen. Hier wordt de tweede activiteit, Procesactie toevoegen, overdrachten van 0 uitgevoerd. Vervolgens zien we Beveiligde sessie instellen.

In de volgende afbeelding ziet u een grafiekweergave van WCF-clientactiviteiten, met name Omgevingsactiviteit (hier 0), Procesactie en Beveiligde sessie instellen:

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

In het rechterbovenhoekvenster zien we alle traceringen die betrekking hebben op de activiteit Procesactie toevoegen. We hebben het aanvraagbericht ('Een bericht verzonden via een kanaal') verzonden en het antwoord ontvangen ('Een bericht ontvangen via een kanaal') in dezelfde activiteit. Dit wordt weergegeven in de volgende grafiek. Voor de duidelijkheid wordt de activiteit Beveiligde sessie instellen samengevouwen in de grafiek.

In de volgende afbeelding ziet u een lijst met traceringen voor de activiteit Procesactie. We verzenden de aanvraag en ontvangen het antwoord in dezelfde activiteit.

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

Hier laden we clienttraceringen alleen voor duidelijkheid, maar servicetraceringen (ontvangen bericht aanvragen en antwoordbericht verzonden) worden weergegeven in dezelfde activiteit als ze ook in het hulpprogramma zijn geladen en propagateActivity zijn ingesteld op true. Dit wordt weergegeven in een latere afbeelding.

In de service wordt het activiteitenmodel als volgt toegewezen aan de WCF-concepten:

  1. We bouwen en openen een ServiceHost (dit kan verschillende hostgerelateerde activiteiten maken, bijvoorbeeld in het geval van beveiliging).

  2. We maken een Listen At-activiteit voor elke listener in de ServiceHost (met overdrachten in en uit Open ServiceHost).

  3. Wanneer de listener een communicatieaanvraag detecteert die door de client is geïnitieerd, wordt deze overgedragen naar een activiteit 'Bytes ontvangen', waarin alle bytes die vanaf de client worden verzonden, worden verwerkt. In deze activiteit kunnen we eventuele verbindingsfouten zien die zijn opgetreden tijdens de interactie met de clientservice.

  4. Voor elke set bytes die wordt ontvangen die overeenkomt met een bericht, verwerken we deze bytes in een activiteit Bericht verwerken, waarbij we het WCF-berichtobject maken. In deze activiteit zien we fouten met betrekking tot een ongeldige envelop of een onjuist ingedeeld bericht.

  5. Zodra het bericht is gevormd, worden we overgezet naar een activiteit procesactie. Als propagateActivity deze is ingesteld true op zowel de client als de service, heeft deze activiteit dezelfde id als de id die in de client is gedefinieerd en die eerder is beschreven. Vanuit deze fase profiteren we van directe correlatie tussen eindpunten, omdat alle traceringen die zijn verzonden in WCF die zijn gerelateerd aan de aanvraag zich in dezelfde activiteit bevinden, inclusief de verwerking van het antwoordbericht.

  6. Voor een out-of-process-actie maken we een activiteit 'Gebruikerscode uitvoeren' om traceringen te isoleren die in gebruikerscode worden verzonden van de traceringen die in WCF worden verzonden. In het voorgaande voorbeeld wordt de tracering 'Antwoord toevoegen verzenden' verzonden in de activiteit 'Gebruikerscode uitvoeren' niet in de activiteit die door de client wordt doorgegeven, indien van toepassing.

In de volgende afbeelding is de eerste activiteit aan de linkerkant de hoofdactiviteit (0000), de standaardactiviteit. De volgende drie activiteiten zijn om de ServiceHost te openen. De activiteit in kolom 5 is de listener en de resterende activiteiten (6 tot 8) beschrijven de WCF-verwerking van een bericht, van bytesverwerking tot activering van gebruikerscode.

In de volgende afbeelding ziet u een grafiekweergave van WCF-serviceactiviteiten:

Screenshot of Trace Viewer showing a list of WCF service activities

In de volgende schermopname ziet u de activiteiten voor zowel de client als de service en markeert u de activiteit Procesactie toevoegen tussen processen (oranje). Pijlen relateren de aanvraag- en antwoordberichten die zijn verzonden en ontvangen door de client en service. De traceringen van procesactie worden gescheiden door processen in de grafiek, maar worden weergegeven als onderdeel van dezelfde activiteit in het deelvenster rechtsboven. In dit deelvenster zien we clienttraceringen voor verzonden berichten, gevolgd door servicetraceringen voor ontvangen en verwerkte berichten.

In de volgende afbeeldingen ziet u een grafiekweergave van zowel WCF-client- als serviceactiviteiten

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

In het volgende foutscenario zijn fout- en waarschuwingstraceringen bij de service en client gerelateerd. Er wordt eerst een uitzondering gegenereerd in de gebruikerscode op de service (meest groene activiteit die een waarschuwingstracering bevat voor de uitzondering 'De service kan deze aanvraag niet verwerken in gebruikerscode.' Wanneer het antwoord naar de client wordt verzonden, wordt er opnieuw een waarschuwingstracering verzonden om het foutbericht aan te geven (roze activiteit links). De client sluit vervolgens de WCF-client (gele activiteit linksonder), waardoor de verbinding met de service wordt afgebroken. De service genereert een fout (langste roze activiteit aan de rechterkant).

Using the Trace Viewer

Foutcorrelatie tussen de service en client

Het voorbeeld dat wordt gebruikt om deze traceringen te genereren, is een reeks synchrone aanvragen met behulp van wsHttpBinding. Er zijn afwijkingen van deze grafiek voor scenario's zonder beveiliging of met asynchrone aanvragen, waarbij de activiteit Procesactie de begin- en eindbewerkingen omvat die de asynchrone aanroep vormen en overdrachten naar een callback-activiteit weergeeft. Zie end-to-end traceringsscenario's voor meer informatie over aanvullende scenario's.

Problemen oplossen met behulp van de Service Trace Viewer

Wanneer u traceringsbestanden laadt in het hulpprogramma Service Trace Viewer, kunt u in het linkerdeelvenster een rode of gele activiteit selecteren om de oorzaak van een probleem in uw toepassing op te sporen. De 000-activiteit heeft doorgaans niet-verwerkte uitzonderingen die tot de gebruiker bellen.

In de volgende afbeelding ziet u hoe u een rode of gele activiteit selecteert om de hoofdmap van een probleem te vinden. Screenshot of red or yellow activities for locating the root of a problem.

In het deelvenster rechtsboven kunt u traceringen onderzoeken voor de activiteit die u aan de linkerkant hebt geselecteerd. Vervolgens kunt u rode of gele traceringen in dat paneel onderzoeken en zien hoe ze zijn gecorreleerd. In de voorgaande grafiek zien we waarschuwingstraceringen voor zowel de client als de service in dezelfde procesactieactiviteit.

Als deze traceringen u niet de hoofdoorzaak van de fout bieden, kunt u de grafiek gebruiken door te dubbelklikken op de geselecteerde activiteit in het linkerdeelvenster (hier procesactie). De grafiek met gerelateerde activiteiten wordt vervolgens weergegeven. Vervolgens kunt u gerelateerde activiteiten uitvouwen (door op de "+"-tekens te klikken) om de eerste verzonden tracering in rood of geel te vinden in een gerelateerde activiteit. Breid de activiteiten uit die net vóór de rode of gele tracering van belang zijn, na overdrachten naar gerelateerde activiteiten of berichtstromen tussen eindpunten, totdat u de hoofdoorzaak van het probleem bijhoudt.

Using the Trace Viewer

Activiteiten uitbreiden om de hoofdoorzaak van een probleem bij te houden

Als ServiceModel ActivityTracing is uitgeschakeld, maar ServiceModel-tracering is ingeschakeld, kunt u ServiceModel-traceringen zien die zijn verzonden in de activiteit 0000. Hiervoor is echter meer inspanning vereist om de correlatie van deze traceringen te begrijpen.

Als berichtlogboekregistratie is ingeschakeld, kunt u het tabblad Bericht gebruiken om te zien welk bericht wordt beïnvloed door de fout. Door te dubbelklikken op een bericht in rood of geel, ziet u de grafiekweergave van de gerelateerde activiteiten. Deze activiteiten zijn de activiteiten die het meest verwant zijn aan de aanvraag waar een fout is opgetreden.

Screenshot of Trace Viewer with message logging enabled.

Als u wilt beginnen met het oplossen van problemen, kunt u ook een rode of gele berichttracering kiezen en erop dubbelklikken om de hoofdoorzaak bij te houden.

Zie ook