Delen via


Deelnemers bijhouden

Deelnemers bijhouden zijn uitbreidbaarheidspunten waarmee een werkstroomontwikkelaar toegang heeft tot TrackingRecord objecten en deze kan 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 deelnemer schrijven.

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 logboeken. 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 bekeken 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>

Notitie

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 bestand Machine.config gebruikt.

In het bestand Machine.config 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 Web.config-bestand (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.

Flow of tracking data through the ETW tracking provider.

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 afkapping 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-stoom.

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

Voor de sessie met de ondergrens kan de gebeurtenis worden afgekapt. De ETW-tracking deelnemer heeft geen kennis van het aantal sessies luisteren naar de gebeurtenissen; als een gebeurtenis wordt afgekapt voor een sessie, probeert de ETW-deelnemer de gebeurtenis eenmaal te verzenden. In dit geval krijgt de sessie die is geconfigureerd voor het accepteren van een grotere nettolading twee keer de gebeurtenis (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 Logboeken

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

Notitie

Bijhouden van recordgebeurtenissen die worden verzonden naar een ETW-sessie, gebruiken gebeurtenis-id's in het bereik van 100 tot en met 199.

De traceringsrecords inschakelen in Logboeken

  1. De Logboeken (EVENTVWR.EXE) starten

  2. Selecteer Logboeken, Logboeken toepassingen en services, 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 analyselogboek en selecteer Logboek inschakelen. Het logboek bestaat in het bestand %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-Application Server-Applications%4Analytic.etl.

Aangepaste deelnemer bijhouden

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. Als u een aangepaste deelnemer wilt 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 gebeurtenis verzendt een ETW-gebeurtenis (Event Tracking for Windows) voor elke traceringsrecord die wordt ontvangen. Als u een aangepaste deelnemer wilt maken, wordt er een klasse gemaakt die is afgeleid van TrackingParticipant. Als u eenvoudige traceringsfunctionaliteit wilt bieden, overschrijft Tracku . Track wordt aangeroepen wanneer een traceringsrecord wordt verzonden door de runtime en op de gewenste manier kan 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 asynchroon verwerkt met behulp van BeginTrack de bijbehorende 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 werkstroomexemplaren dat u wilt bijhouden, zoals wordt weergegeven 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