Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het CustomTracking-voorbeeld laat zien hoe u een aangepaste traceringsdeelnemer maakt en de inhoud van de traceringsgegevens naar de console schrijft. Daarnaast ziet u in het voorbeeld hoe u objecten verzendt CustomTrackingRecord die zijn gevuld met door de gebruiker gedefinieerde gegevens. De op de console gebaseerde traceringsdeelnemer filtert de TrackingRecord objecten die door de werkstroom worden verzonden met behulp van een traceringsprofielobject dat in code is gemaakt.
Voorbeeldgegevens
Windows Workflow Foundation (WF) biedt een traceringsinfrastructuur om de uitvoering van een werkstroomexemplaar bij te houden. De tracking-runtime implementeert een werkstroomexemplaar om gebeurtenissen uit te zenden die betrekking hebben op de levenscyclus van de werkstroom, gebeurtenissen van werkstroomactiviteiten en aangepaste tracking-gebeurtenissen. De volgende tabel bevat informatie over de primaire onderdelen van de traceringsinfrastructuur.
| Onderdeel | Beschrijving |
|---|---|
| Runtime monitoren | Biedt de infrastructuur voor het verzenden van traceringsrecords. |
| Deelnemers bijhouden | Hiermee worden de traceringsrecords gebruikt. .NET Framework 4 wordt geleverd met een traceerparticipant die traceringsrecords schrijft als ETW-gebeurtenissen (Event Tracing voor Windows). |
| Traceringsprofiel | Een filtermechanisme waarmee een traceringsdeelnemer zich kan abonneren op een subsectie van de traceringsrecords die afkomstig zijn van een werkstroominstantie. |
De volgende tabel bevat informatie over de traceringsrecords die door de werkstroomruntime worden verzonden.
| Traceringsrecord | Beschrijving |
|---|---|
| Registraties voor het bijhouden van werkstroominstanties. | Beschrijft de levenscyclus van de werkstroominstantie. Bijvoorbeeld, een exemplaarrecord wordt verzonden wanneer de werkstroom start of voltooid is. |
| Records voor het bijhouden van activiteitsstatussen. | Details van de uitvoering van de activiteit. Deze records geven de status van een werkstroomactiviteit aan, zoals wanneer een activiteit wordt gepland of wanneer de activiteit is voltooid of wanneer er een fout optreedt. |
| Record voor hervatting van bladwijzers. | Wordt gegenereerd wanneer een bladwijzer in een werkstroominstantie wordt hervat. |
| Aangepaste bijhoudingsrecords. | Een auteur van een werkstroom kan aangepaste traceringsrecords maken en deze verzenden binnen de aangepaste activiteit. |
De traceringsdeelnemer abonneert zich op een subset van de verzonden TrackingRecord objecten met behulp van traceringsprofielen. Een traceringsprofiel bevat traceringsquery's waarmee u zich kunt abonneren op een bepaald traceringsrecordtype. Traceringsprofielen kunnen worden opgegeven in code of in configuratie.
Deelnemer voor aangepast volgen
Met de API van de traceringsdeelnemer kan de runtime voor tracering worden uitgebreid met een door de gebruiker verstrekte traceringsdeelnemer die aangepaste logica kan bevatten voor het verwerken TrackingRecord van objecten die door de werkstroomruntime worden verzonden.
Om een traceringsdeelnemer te schrijven, moet de gebruiker TrackingParticipant implementeren. Specifiek moet de Track methode worden geïmplementeerd door de aangepaste partij. Deze methode wordt aangeroepen wanneer een TrackingRecord door de werkstroomruntime wordt uitgezonden.
public abstract class TrackingParticipant
{
protected TrackingParticipant();
public virtual TrackingProfile TrackingProfile { get; set; }
public abstract void Track(TrackingRecord record, TimeSpan timeout);
}
De volledige traceringsdeelnemer wordt geïmplementeerd in het ConsoleTrackingParticipant.cs-bestand. Het volgende codevoorbeeld is de Track methode voor de aangepaste traceringsdeelnemer.
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
...
WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
if (workflowInstanceRecord != null)
{
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" Workflow InstanceID: {0} Workflow instance state: {1}",
record.InstanceId, workflowInstanceRecord.State));
}
ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
if (activityStateRecord != null)
{
IDictionary<String, object> variables = activityStateRecord.Variables;
StringBuilder vars = new StringBuilder();
if (variables.Count > 0)
{
vars.AppendLine("\n\tVariables:");
foreach (KeyValuePair<string, object> variable in variables)
{
vars.AppendLine(String.Format(
"\t\tName: {0} Value: {1}", variable.Key, variable.Value));
}
}
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
activityStateRecord.Activity.Name, activityStateRecord.State,
((variables.Count > 0) ? vars.ToString() : String.Empty)));
}
CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;
if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
{
...
}
Console.WriteLine();
}
In het volgende codevoorbeeld wordt de consoledeelnemer toegevoegd aan de aanroeper van de werkstroom.
ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
...
// The tracking profile is set here, refer to Program.CS
...
}
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
Aangepaste traceringsrecords verzenden
In dit voorbeeld ziet u ook de mogelijkheid om objecten uit een aangepaste werkstroomactiviteit te verzenden CustomTrackingRecord :
De CustomTrackingRecord objecten worden gemaakt en gevuld met door de gebruiker gedefinieerde gegevens die met de record moeten worden verzonden.
De CustomTrackingRecord wordt verzonden door het aanroepen van de track-methode van de ActivityContext.
In het volgende voorbeeld ziet u hoe u CustomTrackingRecord-objecten afgeeft binnen een aangepaste activiteit.
// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
Data =
{
{"OrderId", 200},
{"OrderDate", "20 Aug 2001"}
}
};
// Emit custom tracking record
context.Track(customRecord);
Dit voorbeeld gebruiken
Open met Visual Studio het CustomTrackingSample.sln-oplossingsbestand.
Druk op Ctrl+Shift+B om de oplossing te bouwen.
Druk op Ctrl+F5 om de oplossing uit te voeren.