Condividi tramite


Esempio di ConsoleTrackingService

Download sample

In questo esempio viene illustrato come creare un servizio di rilevamento e scrivere il contenuto dei dati registrati nella console.

Windows Workflow Foundation fornisce un'infrastruttura di rilevamento che consente alle applicazioni di rilevare cambiamenti di stato e di dati del flusso di lavoro. Inoltre, offre la flessibilità per creare i servizi di rilevamento più adatti per le esigenze aziendali e utilizzare i servizi di rilevamento nel runtime del flusso di lavoro.

Per scrivere un servizio di rilevamento, è necessario implementare un canale di rilevamento e un servizio di rilevamento. Il canale di rilevamento riceve i record di rilevamento inviati dal runtime. Il servizio di rilevamento fornisce il runtime con i profili di rilevamento in base a specifici parametri e condizioni. Il servizio di rilevamento è inoltre incaricato di fornire un canale di rilevamento che riceve i dati inviati dal runtime.

Nota

Il valore di tempo nei dati di rilevamento è in formato UTC (ora di Greenwich).

Panoramica dell'esempio

L'esempio è un'applicazione console del flusso di lavoro contenente uno flusso di lavoro e un semplice servizio di rilevamento. SampleWorkflow è un flusso di lavoro che dispone di un gestore del codice nel quale è generato un UserTrackPoint.

Il servizio di rilevamento completo viene implementato in ConsoleTrackingService.cs e dispone delle seguenti implementazioni TrackingChannelSample e ConsoleTrackingService:

  • TrackingChannelSample implementa il metodo Send nel modo seguente:

    public override void Send(TrackingRecord record)
    {
        // Filter on record type.
        if (record is WorkflowTrackingRecord)
        {
            WriteWorkflowTrackingRecord((WorkflowTrackingRecord)record);
        }
        if (record is ActivityTrackingRecord)
        {
            WriteActivityTrackingRecord((ActivityTrackingRecord)record);
        }
        if (record is UserTrackingRecord)
        {
            WriteUserTrackingRecord((UserTrackingRecord)record);
        }
    }
    

Inoltre, TrackingChannelSample implementa il metodo InstanceCompletedOrTerminated scrivendo un messaggio nella console. Il metodo InstanceCompletedOrTerminated viene chiamato dal runtime del rilevamento per indicare che l'esecuzione dell'istanza del flusso di lavoro è terminata, indipendentemente dal profilo di rilevamento associato a tale istanza.

  • ConsoleTrackingService implementa il seguente metodo:

    public override TrackingChannel GetTrackingChannel(TrackingParameters parameters)
    {
        //Return a tracking channel to receive runtime events.
        return new TrackingChannelSample(parameters);
    }
    

Per generare l'esempio

  1. Scaricare l'esempio facendo clic su Scarica esempio.

    In tal modo viene estratto il progetto di esempio sul disco rigido locale.

  2. Fare clic sul pulsante Start, scegliere Programmi, Microsoft Windows SDK e fare clic su CMD Shell.

  3. Accedere alla directory di origine dell'esempio.

  4. Al prompt dei comandi, immettere MSBUILD <nome file soluzione>.

Per eseguire l'esempio

  • Nella finestra del prompt dei comandi di SDK, eseguire il file exe nella cartella ConsoleTrackingService\bin\debug (o nella cartella ConsoleTrackingService\bin per la versione VB dell'esempio), collocata sotto la cartella principale dell'esempio.

Argomenti avanzati

Nell'esempio non vengono implementati i seguenti argomenti. Essi rappresentano puntatori ad argomenti del flusso di lavoro più avanzati da esaminare.

Runtime e comunicazione dei servizi di rilevamento

Le chiamate del runtime ai servizi di rilevamento sono sincrone. L'esecuzione del flusso di lavoro viene bloccata fino al ritorno dai metodi del servizio di rilevamento.

Aggiornamenti del profilo

Windows Workflow Foundation fornisce la flessibilità per comunicare gli aggiornamenti o la rimozione del profilo al runtime di rilevamento derivando da IProfileNotification e implementando gestori eventi come riportato di seguito:

public class ConsoleTrackingService : TrackingService, IProfileNotification

public event EventHandler<ProfileUpdatedEventArgs> ProfileUpdated;
public event EventHandler<ProfileRemovedEventArgs> ProfileRemoved;

ReloadProfiles

Se si desidera ricaricare un profilo per una specifica istanza del flusso di lavoro, è possibile chiamare ReloadTrackingProfiles sull'istanza come riportato di seguito:

WorkflowInstance wi = wr.StartWorkflow(typeof(SampleWorkflow));
wi.ReloadTrackingProfiles();

In tal modo il runtime chiama il metodo TryReloadProfile sul TrackingService registrato per ottenere il nuovo profilo per tale istanza.

Overload di GetProfile

Il runtime del flusso di lavoro chiama il seguente metodo per chiedere a un profilo un workflowInstanceId specifico. Implementare questo metodo se è supportato il ricaricamento di profili specifici dell'istanza.

GetProfile(Guid workflowInstanceId)

Il runtime del flusso di lavoro chiama il seguente metodo per richiedere un profilo specifico della versione. Implementare questo metodo se è supportato il ricaricamento di profili specifici della versione.

GetProfile(Type workflowType, Version profileVersionId)

Vedere anche

Riferimenti

ActivityTrackingRecord
WorkflowTrackingRecord
IProfileNotification

Altre risorse

Esempi di rilevamento
Esempio di rilevamento semplice
Esempio di esecuzione di query con l'utilizzo di SQLTrackingService
Esempio di rilevamento tramite track point utente
Esempio di rilevamento di EventArgs
Esempio di esecuzione di query con l'utilizzo di SQLTrackingService
Esempio di RuleActionTrackingEvent
Esempio di servizio di rilevamento file e query
Esempio di utilizzo del modello a oggetti del profilo di rilevamento
Esempio di manutenzione di dati SQL
Windows Workflow Tracking Services

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.