Rilevamento personalizzatoCustom Tracking

Nell'esempio viene illustrato come creare un partecipante di rilevamento personalizzato e scrivere il contenuto dei dati di rilevamento nella console.This sample demonstrates how to create a custom tracking participant and write the contents of the tracking data to console. Nell'esempio viene inoltre illustrato come generare oggetti CustomTrackingRecord popolati con dati definiti dall'utente.In addition, the sample demonstrates how to emit CustomTrackingRecord objects populated with user defined data. Il partecipante di rilevamento basato su console filtra gli oggetti TrackingRecord generati dal flusso di lavoro usando un oggetto profilo di rilevamento creato nel codice.The console-based tracking participant filters the TrackingRecord objects emitted by the workflow using a tracking profile object created in code.

Dettagli dell'esempioSample Details

Windows Workflow Foundation (WF) fornisce un'infrastruttura di rilevamento per tenere traccia dell'esecuzione di un'istanza del flusso di lavoro.Windows Workflow Foundation (WF) provides a tracking infrastructure to track execution of a workflow instance. Il runtime di rilevamento implementa un'istanza del flusso di lavoro per generare eventi correlati al ciclo di vita del flusso di lavoro, eventi da attività del flusso di lavoro ed eventi personalizzati.The tracking runtime implements a workflow instance to emit events related to the workflow lifecycle, events from workflow activities and custom tracking events. Nella tabella seguente sono indicati in dettaglio i componenti primari dell'infrastruttura di rilevamento.The following table details the primary components of the tracking infrastructure.

ComponenteComponent DescrizioneDescription
Esecuzione del rilevamentoTracking runtime Fornisce l'infrastruttura per la creazione dei record di rilevamento.Provides the infrastructure to emit tracking records.
Partecipanti del rilevamentoTracking participants Usa i record di rilevamento.Consumes the tracking records. .NET Framework 4.NET Framework 4 viene fornito con un partecipante del rilevamento che scrive record di rilevamento come eventi ETW (Traccia eventi per Windows). ships with a tracking participant that writes tracking records as Event Tracing for Windows (ETW) events.
Profilo di rilevamentoTracking profile Meccanismo di filtro che consente a un partecipante del rilevamento di sottoscrivere un subset dei record di rilevamento creati da un'istanza del flusso di lavoro.A filtering mechanism that allows a tracking participant to subscribe for a subset of the tracking records emitted from a workflow instance.

Nella tabella seguente vengono indicati in dettaglio i record di rilevamento creati dall'esecuzione del flusso di lavoro.The following table details the tracking records that the workflow runtime emits.

Record di rilevamentoTracking Record DescrizioneDescription
Record di rilevamento dell'istanza del flusso di lavoro.Workflow instance tracking records. Descrivono il ciclo di vita dell'istanza del flusso di lavoro.Describes the life cycle of the workflow instance. Ad esempio un record di istanza viene creato quando viene avviato o completato il flusso di lavoro.For example, an instance record is emitted when the workflow starts or completes.
Record di rilevamento dello stato dell'attività.Activity state Tracking Records. Illustrano in dettaglio l'esecuzione dell'attività.Details activity execution. Questi record indicano lo stato di un'attività del flusso di lavoro, ad esempio quando un'attività viene pianificata, quando viene completata o quando viene generato un errore.These records indicate the state of a workflow activity such as when an activity is scheduled or when the activity completes or when a fault is thrown.
Record di ripresa del segnalibro.Bookmark resumption record. Generato quando viene ripreso un segnalibro all'interno di un'istanza del flusso di lavoro.Emitted whenever a bookmark within a workflow instance is resumed.
Record di rilevamento personalizzati.Custom Tracking Records. Un autore del flusso di lavoro può creare record di rilevamento personalizzati e generarli all'interno dell'attività personalizzata.A workflow author can create Custom Tracking Records and emit them within the custom activity.

Il partecipante di rilevamento sottoscrive un subset degli oggetti TrackingRecord generati usando profili di rilevamento.The tracking participant subscribes for a subset of the emitted TrackingRecord objects using tracking profiles. Un profilo di rilevamento contiene query di rilevamento che consentono la sottoscrizione di un particolare tipo di record di rilevamento.A tracking profile contains tracking queries that allow subscribing for a particular tracking record type. I profili di rilevamento possono essere specificati nel codice o nella configurazione.Tracking profiles can be specified in code or in configuration.

Partecipante di rilevamento personalizzatoCustom Tracking Participant

L'API del partecipante di rilevamento consente l'estensione del runtime di rilevamento con un partecipante di rilevamento fornito dall'utente, che può includere la logica personalizzata per gestire gli oggetti TrackingRecord generati dall'esecuzione del flusso di lavoro.The tracking participant API allows extension of the tracking runtime with a user provided tracking participant that can include custom logic to handle TrackingRecord objects emitted by the workflow runtime.

Per scrivere un partecipante di rilevamento l'utente deve implementare TrackingParticipant.To write a tracking participant the user must implement TrackingParticipant. In particolare, il metodo Track deve essere implementato dal partecipante personalizzato.Specifically, the Track method has to be implemented by the custom participant. Questo metodo viene chiamato quando un oggetto TrackingRecord viene generato dall'esecuzione del flusso di lavoro.This method is called when a TrackingRecord is emitted by the workflow runtime.

public abstract class TrackingParticipant  
{  
    protected TrackingParticipant();  

    public virtual TrackingProfile TrackingProfile { get; set; }  
    public abstract void Track(TrackingRecord record, TimeSpan timeout);  
}  

Il partecipante di rilevamento completo viene implementato nel file ConsoleTrackingParticipant.cs. L'esempio di codice seguente è il metodo Track per il partecipante di rilevamento personalizzato.The complete tracking participant is implemented in the ConsoleTrackingParticipant.cs file.The following code example is the Track method for the custom tracking participant.

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();  

}  

Nell'esempio di codice seguente viene aggiunto il partecipante della console all'oggetto invoker del flusso di lavoro.The following code example adds the console participant to the workflow invoker.

ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()  
{  
    ...  
    // The tracking profile is set here, refer to Program.CS  
...  
}  

WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());  
invoker.Extensions.Add(customTrackingParticipant);  

Creazione di record di rilevamento personalizzatiEmitting Custom Tracking Records

In questo esempio viene inoltre illustrata la possibilità di generare oggetti CustomTrackingRecord da un'attività flusso di lavoro personalizzata:This sample also demonstrates the ability to emit CustomTrackingRecord objects from a custom workflow activity:

Nell'esempio seguente viene illustrato come generare oggetti CustomTrackingRecord all'interno di un'attività personalizzata.The following example demonstrates how to emit CustomTrackingRecord objects within a custom activity.

// Create the Custom Tracking Record  
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")  
{  
    Data =   
    {  
        {"OrderId", 200},  
        {"OrderDate", "20 Aug 2001"}  
    }  
};  

// Emit custom tracking record  
context.Track(customRecord);  

Per usare questo esempioTo use this sample

  1. In Visual Studio 2010Visual Studio 2010 aprire il file della soluzione CustomTrackingSample.sln.Using Visual Studio 2010Visual Studio 2010, open the CustomTrackingSample.sln solution file.

  2. Per compilare la soluzione, premere CTRL+MAIUSC+B.To build the solution, press CTRL+SHIFT+B.

  3. Per eseguire la soluzione, premere CTRL+F5.To run the solution, press CTRL+F5.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Tracking\CustomTracking

Vedere ancheSee Also

Esempi di monitoraggio di AppFabricAppFabric Monitoring Samples