Delen via


Deelnemers bijhouden

Uitbreidbaarheidspunten voor het bijhouden van deelnemers stellen een werkstroomontwikkelaar in staat toegang te krijgen tot TrackingRecord objecten en deze te verwerken. .NET Framework 4.6.1 bevat een standaardtraceringsdeelnemer die traceringsrecords schrijft als ETW-gebeurtenissen (Event Tracing for Windows). Als dat niet aan uw vereisten voldoet, kunt u ook een aangepaste volgdeelnemer programmeren.

Deelnemers bijhouden

Met de traceringsinfrastructuur kan een filter worden toegepast op de uitgaande traceringsrecords, zodat een deelnemer zich kan abonneren op een subset van de records. Het mechanisme voor het toepassen van een filter verloopt via een traceringsprofiel.

Windows Workflow Foundation (WF) in .NET Framework 4.6.1 biedt een traceringsdeelnemer die de traceringsrecords naar een ETW-sessie schrijft. De deelnemer wordt geconfigureerd in een werkstroomservice door een traceringsspecifiek gedrag toe te voegen in een configuratiebestand. Als u een ETW-traceringsdeelnemer inschakelt, kunnen traceringsrecords worden weergegeven in de gebeurtenisviewer. Het SDK-voorbeeld voor op ETW gebaseerde tracering is een goede manier om vertrouwd te raken met WF-tracering met behulp van de op ETW gebaseerde traceringsdeelnemer.

ETW-traceringsdeelnemer

.NET Framework 4.6.1 bevat een ETW-traceringsdeelnemer die de traceringsrecords naar een ETW-sessie schrijft. Dit gebeurt op een zeer efficiënte manier met minimale gevolgen voor de prestaties van de toepassing of de doorvoer van de server. Een voordeel van het gebruik van de standaard-ETW-traceringsdeelnemer is dat de traceringsrecords die worden ontvangen, kunnen worden weergegeven met de andere toepassings- en systeemlogboeken in de Windows Logboeken.

De standaard-ETW-traceringsdeelnemer wordt geconfigureerd in het Web.config-bestand, zoals wordt weergegeven in het volgende voorbeeld.

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <etwTracking profileName="Sample Tracking Profile"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
   <tracking>
      <profiles>
        <trackingProfile name="Sample Tracking Profile">
        ….
       </trackingProfile>
      </profiles>
    </tracking>
  </system.serviceModel>
</configuration>

Opmerking

Als er trackingProfile geen naam is opgegeven, zoals alleen <etwTracking/> of <etwTracking profileName=""/>, wordt het standaardtrackingsprofiel dat is geïnstalleerd met .NET Framework 4.6.1 in het Machine.config-bestand gebruikt.

In het Machine.config-bestand abonneert het standaardtraceringsprofiel zich op records en fouten van het werkstroomexemplaren.

In ETW worden gebeurtenissen naar de ETW-sessie geschreven via een provider-id. De provider-id die de deelnemer voor ETW-tracering gebruikt voor het schrijven van de traceringsrecords naar ETW, wordt gedefinieerd in de sectie diagnostische gegevens van het bestand Web.config (onder <system.serviceModel><diagnostics>). Standaard gebruikt de deelnemer voor ETW-tracering een standaardprovider-id als deze niet is opgegeven, zoals wordt weergegeven in het volgende voorbeeld.

<system.serviceModel>
        <diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />

In de volgende afbeelding ziet u de stroom van traceringsgegevens via de ETW-traceringsdeelnemer. Zodra de traceringsgegevens de ETW-sessie hebben bereikt, kunnen deze op verschillende manieren worden geopend. Een van de handigste manieren om toegang te krijgen tot deze gebeurtenissen is via Logboeken, een algemeen Windows-hulpprogramma dat wordt gebruikt voor het weergeven van logboeken en traceringen van toepassingen en services.

Stroom van traceringsgegevens via de ETW-traceringsprovider.

Gebeurtenisgegevens van deelnemers bijhouden

Een traceringsdeelnemer serialiseert bijgehouden gebeurtenisgegevens naar een ETW-sessie in de indeling van één gebeurtenis per traceringsrecord. Een gebeurtenis wordt geïdentificeerd met behulp van een id binnen het bereik van 100 tot en met 199. Zie het onderwerp Naslaginformatie voor traceringsevenementen voor definities van de traceringslogboeken die door een deelnemer worden verzonden.

De grootte van een ETW-gebeurtenis wordt beperkt door de ETW-buffergrootte of de maximale nettolading voor een ETW-gebeurtenis, afhankelijk van de waarde die kleiner is. Als de grootte van de gebeurtenis een van deze ETW-limieten overschrijdt, wordt de gebeurtenis afgekapt en wordt de inhoud ervan op een willekeurige manier verwijderd. Variabelen, argumenten, aantekeningen en aangepaste gegevens worden niet selectief verwijderd. In het geval van inkorting worden deze allemaal afgekapt, ongeacht de waarde waardoor de gebeurtenisgrootte de ETW-limiet overschrijdt. De verwijderde gegevens worden vervangen door <item>..<item>.

Complexe typen in variabelen, argumenten en aangepaste gegevensitems worden geserialiseerd naar de ETW-gebeurtenisrecord met behulp van de NetDataContractSerializer klasse. Deze klasse bevat CLR-type informatie in de geserialiseerde XML-stroom.

Het afbreken van payloadgegevens vanwege de ETW-limieten kan ertoe leiden dat dubbele traceringsrecords naar een ETW-sessie worden verzonden. Dit kan gebeuren als er meer dan één sessie naar de events luistert en de sessies verschillende belastingslimieten hebben voor de events.

Voor de sessie met de ondergrenswaarde kan de gebeurtenis worden ingekort. De ETW-trackingdeelnemer heeft geen kennis van het aantal sessies die naar de gebeurtenissen luisteren; als een gebeurtenis voor een sessie wordt afgebroken, probeert de ETW-trackingdeelnemer de gebeurtenis eenmaal opnieuw te verzenden. In dit geval ontvangt de sessie, die is geconfigureerd om een grotere payloadgrootte te accepteren, de gebeurtenis twee keer (de niet-afgekapte en afgekapte gebeurtenis). Duplicatie kan worden voorkomen door alle ETW-sessies met dezelfde buffergroottelimieten te configureren.

Toegang tot traceringsgegevens van een ETW-deelnemer in de Logboekviewer

Gebeurtenissen die zijn geschreven naar een ETW-sessie door de ETW-traceringsdeelnemer, kunnen worden geopend via het Hulpprogramma voor gebeurtenisweergave (wanneer u de standaardprovider-ID gebruikt). Hierdoor kunt u snel traceringsrecords bekijken die door de werkstroom zijn verzonden.

Opmerking

Het bijhouden van gebeurtenissen in records die worden verzonden naar een ETW-sessie, gebruikt gebeurtenis-ID's in het bereik van 100 tot en met 199.

Het inschakelen van het bekijken van de traceringsrecords in de Gebeurtenisviewer

  1. Logboeken starten (EVENTVWR.EXE)

  2. Selecteer Evenementviewer, toepassingen en serviceslogboeken, Microsoft, Windows, toepassingsservertoepassingen.

  3. Klik met de rechtermuisknop en zorg ervoor dat de logboeken Weergave, Analyse en Foutopsporing weergeven zijn geselecteerd. Als dat niet zo is, selecteert u dit zodat het vinkje ernaast wordt weergegeven. Hiermee worden de logboeken Analyse, Prestatie en Foutopsporing weergegeven.

  4. Klik met de rechtermuisknop op het Analytisch logboek en selecteer Inschakelen logboek. Het logboek bestaat in het bestand %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-Application Server-Applications%4Analytic.etl-bestand.

Deelnemer voor aangepast volgen

Met de API voor het bijhouden van deelnemers kan de runtime voor tracering worden uitgebreid met een door de gebruiker verstrekte traceringsdeelnemer die aangepaste logica kan bevatten voor het afhandelen van traceringsrecords die door de werkstroomruntime worden verzonden. Om een aangepaste tracking-deelnemer te schrijven, moet de ontwikkelaar de Track methode in de TrackingParticipant klasse implementeren. Deze methode wordt aangeroepen wanneer een traceringsrecord wordt verzonden door de werkstroomruntime.

Deelnemers bijhouden die zijn afgeleid van de TrackingParticipant klas. De door het systeem geleverde EtwTrackingParticipant verzendt een ETW-gebeurtenis (Event Tracking for Windows) voor elke traceringsrecord die wordt ontvangen. Om een aangepaste tracking deelnemer te maken, wordt een klasse gemaakt die is afgeleid van TrackingParticipant. Als u basis-traceringsfunctionaliteit wilt bieden, overschrijft u Track. Track wordt aangeroepen wanneer een traceringsrecord door de runtime wordt verzonden en kan op de gewenste manier worden verwerkt. In het volgende voorbeeld wordt een aangepaste deelnemerklasse voor tracering gedefinieerd waarmee alle traceringsrecords naar het consolevenster worden verzonden. U kunt ook een TrackingParticipant object implementeren dat de traceringsrecords verwerkt asynchroon door gebruik te maken van zijn BeginTrack en EndTrack methoden.

class ConsoleTrackingParticipant : TrackingParticipant
{
    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        if (record != null)
        {
            Console.WriteLine("=================================");
            Console.WriteLine(record);
        }
    }
}

Als u een bepaalde traceringsdeelnemer wilt gebruiken, registreert u deze bij het werkstroomexemplaar dat u wilt bijhouden, zoals te zien is in het volgende voorbeeld.

myInstance.Extensions.Add(new ConsoleTrackingParticipant());

In het volgende voorbeeld wordt een werkstroom gemaakt die bestaat uit een Sequence activiteit die een WriteLine activiteit bevat. Het ConsoleTrackingParticipant wordt toegevoegd aan de extensies en de werkstroom wordt aangeroepen.

Activity activity= new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Hello World."
        }
    }
};

WorkflowApplication instance = new WorkflowApplication(activity);

instance.Extensions.Add(new ConsoleTrackingParticipant());
  instance.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
            {
                Console.WriteLine("workflow instance completed, Id = " + instance.Id);
                resetEvent.Set();
            };
            instance.Run();
            Console.ReadLine();

Zie ook