Tracering configureren voor een werkstroom
Een werkstroom kan op drie manieren worden uitgevoerd:
Gehost in WorkflowServiceHost
Uitgevoerd als een WorkflowApplication
Rechtstreeks uitgevoerd met WorkflowInvoker
Afhankelijk van de optie voor het hosten van werkstromen kan een deelnemer worden toegevoegd via code of via een configuratiebestand. In dit onderwerp wordt beschreven hoe het bijhouden is geconfigureerd door een deelnemer aan een en een WorkflowServiceHosttracering toe te WorkflowApplication voegen en hoe u bijhouden kunt inschakelen wanneer u deze gebruiktWorkflowInvoker.
Werkstroomtoepassingstracering configureren
Een werkstroom kan worden uitgevoerd met behulp van de WorkflowApplication klasse. In dit onderwerp wordt gedemonstreerd hoe het bijhouden is geconfigureerd voor een .NET Framework 4.6.1-werkstroomtoepassing door een deelnemer aan de WorkflowApplication werkstroomhost toe te voegen. In dit geval wordt de werkstroom uitgevoerd als een werkstroomtoepassing. U configureert een werkstroomtoepassing via code (in plaats van met behulp van een configuratiebestand), een zelf-hostend .exe-bestand met behulp van de WorkflowApplication klasse. De deelnemer voor het bijhouden wordt toegevoegd als een uitbreiding voor het WorkflowApplication exemplaar. Dit wordt gedaan door de TrackingParticipant verzameling extensies voor het WorkflowApplication-exemplaar toe te voegen aan de verzameling extensies.
Voor een werkstroomtoepassing kunt u de EtwTrackingParticipant gedragsextensie toevoegen, zoals wordt weergegeven in de volgende code.
LogActivity activity = new LogActivity();
WorkflowApplication instance = new WorkflowApplication(activity);
EtwTrackingParticipant trackingParticipant =
new EtwTrackingParticipant
{
TrackingProfile = new TrackingProfile
{
Name = "SampleTrackingProfile",
ActivityDefinitionId = "ProcessOrder",
Queries = new WorkflowInstanceQuery
{
States = { "*" }
}
}
};
instance.Extensions.Add(trackingParticipant);
Werkstroomservicetracering configureren
Een werkstroom kan worden weergegeven als een WCF-service wanneer deze wordt gehost op de WorkflowServiceHost servicehost. WorkflowServiceHost is een gespecialiseerde .NET ServiceHost-implementatie voor een op werkstroom gebaseerde service. In deze sectie wordt uitgelegd hoe u tracering configureert voor een .NET Framework 4.6.1-werkstroomservice die wordt uitgevoerd in WorkflowServiceHost. Het wordt geconfigureerd via een Web.config-bestand (voor een web-hostende service) of een App.config-bestand (voor een service die wordt gehost in een zelfstandige toepassing, zoals een consoletoepassing) door een servicegedrag of via code op te geven door een traceringsspecifiek gedrag toe te voegen aan de verzameling voor de Behaviors servicehost.
Voor een werkstroomservice die wordt gehost WorkflowServiceHost, kunt u het EtwTrackingParticipant element toevoegen met behulp van het <behavior
> element in een configuratiebestand, zoals wordt weergegeven in het volgende voorbeeld.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile" />
</behavior>
</serviceBehaviors>
</behaviors>
U kunt ook voor een werkstroomservice die wordt WorkflowServiceHostgehost, de EtwTrackingParticipant gedragsextensie toevoegen via code. Als u een aangepaste traceringsdeelnemer wilt toevoegen, maakt u een nieuwe gedragsextensie en voegt u deze toe aan de ServiceHost extensie zoals wordt weergegeven in de volgende voorbeeldcode.
Notitie
Als u voorbeeldcode wilt weergeven die laat zien hoe u een aangepast gedragselement maakt waarmee een aangepaste deelnemer aan het bijhouden wordt toegevoegd, raadpleegt u de voorbeelden voor bijhouden .
ServiceHost svcHost = new ServiceHost(typeof(WorkflowService), new
Uri("http://localhost:8001/Sample"));
EtwTrackingBehavior trackingBehavior =
new EtwTrackingBehavior
{
ProfileName = "Sample Tracking Profile"
};
svcHost.Description.Behaviors.Add(trackingBehavior);
svcHost.Open();
De deelnemer die het bijhouden is, wordt toegevoegd aan de host van de werkstroomservice als uitbreiding voor het gedrag.
In deze voorbeeldcode hieronder ziet u hoe u een traceringsprofiel leest uit een configuratiebestand.
TrackingProfile GetProfile(string profileName, string displayName)
{
TrackingProfile trackingProfile = null;
TrackingSection trackingSection = (TrackingSection)WebConfigurationManager.GetSection("system.serviceModel/tracking");
if (trackingSection == null)
{
return null;
}
profileName ??= "";
//Find the profile with the specified profile name in the list of profile found in config
var match = from p in new List<TrackingProfile>(trackingSection.TrackingProfiles)
where (p.Name == profileName) && ((p.ActivityDefinitionId == displayName) || (p.ActivityDefinitionId == "*"))
select p;
if (match.Count() == 0)
{
//return an empty profile
trackingProfile = new TrackingProfile()
{
ActivityDefinitionId = displayName
};
}
else
{
trackingProfile = match.First();
}
return trackingProfile;
Deze voorbeeldcode laat zien hoe u een traceringsprofiel toevoegt aan een werkstroomhost.
WorkflowServiceHost workflowServiceHost = serviceHostBase as WorkflowServiceHost;
if (null != workflowServiceHost)
{
string workflowDisplayName = workflowServiceHost.Activity.DisplayName;
TrackingProfile trackingProfile = GetProfile(this.profileName, workflowDisplayName);
workflowServiceHost.WorkflowExtensions.Add(() => new EtwTrackingParticipant {
TrackingProfile = trackingProfile
});
}
Notitie
Raadpleeg Traceringsprofielen voor meer informatie over traceringsprofielen.
Tracering configureren met Behulp van WorkflowInvoker
Als u tracering wilt configureren voor een werkstroom die wordt uitgevoerd met behulp WorkflowInvokervan, voegt u de traceringsprovider toe als een extensie aan een WorkflowInvoker exemplaar. Het volgende codevoorbeeld is afkomstig uit het voorbeeld voor aangepaste tracering .
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
invoker.Invoke();
Traceringsrecords weergeven in Logboeken
Er zijn twee Logboeken logboeken van bijzonder belang om te bekijken bij het bijhouden van WF-uitvoering: het analyselogboek en het logboek voor foutopsporing. Beide bevinden zich onder Microsoft|Windows|Knooppunt Toepassingsservertoepassingen. Logboeken in deze sectie bevatten gebeurtenissen van één toepassing in plaats van gebeurtenissen die van invloed zijn op het hele systeem.
Foutopsporingstracerings gebeurtenissen worden naar het foutopsporingslogboek geschreven. Als u WF-foutopsporingstraceringsevenementen in de Logboeken wilt verzamelen, schakelt u het foutopsporingslogboek in.
Als u Logboeken wilt openen, klikt u op Start en vervolgens op Uitvoeren. Typ
eventvwr
in het dialoogvenster Uitvoeren.Vouw in het dialoogvenster Logboeken het knooppunt Toepassingen en Services-logboeken uit.
Vouw de knooppunten Microsoft, Windows en Application Server-Applications uit.
Klik met de rechtermuisknop op het knooppunt Foutopsporing onder het knooppunt Application Server-Applications en selecteer Logboek inschakelen.
Voer uw toepassing met tracering uit om traceringsgebeurtenissen te genereren.
Klik met de rechtermuisknop op het knooppunt Foutopsporing en selecteer Vernieuwen. Traceringsevenementen moeten zichtbaar zijn in het middelste deelvenster.
WF 4 biedt een traceringsdeelnemer die traceringsrecords schrijft naar een ETW-sessie (Event Tracing for Windows). De ETW-traceringsdeelnemer is geconfigureerd met een traceringsprofiel om u te abonneren op traceringsrecords. Wanneer bijhouden is ingeschakeld, worden fouten bijhouden van records verzonden naar ETW. ETW-traceringsgebeurtenissen (tussen het bereik van 100-113) die overeenkomen met de traceringsgebeurtenissen die door de ETW-traceringsdeelnemer worden verzonden, worden naar het analytische logboek geschreven.
Volg deze stappen om traceringsrecords weer te geven.
Als u Logboeken wilt openen, klikt u op Start en vervolgens op Uitvoeren. Typ
eventvwr
in het dialoogvenster Uitvoeren.Vouw in het dialoogvenster Logboeken het knooppunt Toepassingen en Services-logboeken uit.
Vouw de knooppunten Microsoft, Windows en Application Server-Applications uit.
Klik met de rechtermuisknop op het analyseknooppunt onder het knooppunt Toepassingsservertoepassingen en selecteer Logboek inschakelen.
Voer uw toepassing met tracering uit om traceringsrecords te genereren.
Klik met de rechtermuisknop op het analyseknooppunt en selecteer Vernieuwen. Traceringsrecords moeten zichtbaar zijn in het middelste deelvenster.
In de volgende afbeelding ziet u het bijhouden van gebeurtenissen in de logboeken:
Een toepassingsspecifieke provider-id registreren
Als gebeurtenissen moeten worden geschreven naar een specifiek toepassingslogboek, volgt u deze stappen om het nieuwe providermanifest te registreren.
Declareer de provider-id in het configuratiebestand van de toepassing.
<system.serviceModel> <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/> </system.serviceModel>
Kopieer het manifestbestand van %windir%\Microsoft.NET\Framework\<latest version of .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.applications.man naar een tijdelijke locatie en wijzig de naam in Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Wijzig de GUID in het manifestbestand in de nieuwe GUID.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
Wijzig de providernaam als u de standaardprovider niet wilt verwijderen.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
Als u de providernaam in de vorige stap hebt gewijzigd, wijzigt u de kanaalnamen in het manifestbestand in de naam van de nieuwe provider.
<channel name="Microsoft-Windows-Application Server-Applications_Provider1/Admin" chid="ADMIN_CHANNEL" symbol="ADMIN_CHANNEL" type="Admin" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ADMIN_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Operational" chid="OPERATIONAL_CHANNEL" symbol="OPERATIONAL_CHANNEL" type="Operational" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.OPERATIONAL_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Analytic" chid="ANALYTIC_CHANNEL" symbol="ANALYTIC_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ANALYTIC_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Debug" chid="DEBUG_CHANNEL" symbol="DEBUG_CHANNEL" type="Debug" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.DEBUG_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Perf" chid="PERF_CHANNEL" symbol="PERF_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.PERF_CHANNEL.message)" />
Genereer het bron-DLL-bestand door deze stappen uit te voeren.
Installeer de Windows SDK. De Windows SDK bevat de berichtcompilator (mc.exe) en de resource-compiler (rc.exe).
Voer in een Windows SDK-opdrachtprompt mc.exe uit op het nieuwe manifestbestand.
mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Voer rc.exe uit op het resourcebestand dat in de vorige stap is gegenereerd.
rc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
Maak een leeg cs-bestand met de naam NewProviderReg.cs.
Maak een bron-DLL met behulp van de C#-compiler.
csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
Wijzig de naam van de resource en de dll van het bericht in het manifestbestand
Microsoft.Windows.ApplicationServer.Applications.Provider1.man
van in de nieuwe dll-naam.<provider name="Microsoft-Windows-Application Server-Applications_Provider1" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" symbol="Microsoft_Windows_ApplicationServer_ApplicationEvents" resourceFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" messageFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" />
Gebruik wevtutil om het manifest te registreren.
wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man