Condividi tramite


Esempio di esecuzione di query con l'utilizzo di SQLTrackingService

Download sample

Nell'esempio riportato di seguito viene illustrato l'utilizzo del servizio di rilevamento SQL fornito da Windows Workflow Foundation per rilevare l'esecuzione di un flusso di lavoro.

Il runtime del flusso di lavoro genera determinati eventi durante l'esecuzione di un flusso di lavoro. Il servizio di rilevamento può intercettare questi eventi e archiviare le informazioni relative in un database SQL Server.

Il runtime del flusso di lavoro genera i seguenti tipi di eventi:

  • Eventi a livello di istanza del flusso di lavoro. Questi eventi vengono generati quando un'istanza del flusso di lavoro entra in un determinato stato. Ad esempio, viene generato un evento quando viene inizializzata l'istanza del flusso di lavoro o quando l'istanza del flusso di lavoro è in esecuzione.

  • Eventi a livello di attività. Un flusso di lavoro è costituito da attività e ogni attività segue un ciclo di vita. Durante il ciclo di vita, l'attività passa attraverso più stati. Viene generato un evento quando un'attività entra in un particolare stato.

  • Eventi registrati dall'utente. Un autore del flusso di lavoro può creare eventi di rilevamento personalizzati e può aggiungerli al code-beside del flusso di lavoro.

I dati derivanti dai dati del flusso di lavoro possono essere generati e forniti al servizio di rilevamento insieme agli eventi.

Durante il rilevamento di un flusso di lavoro, si potrebbe non essere interessati a tutti gli eventi per tutti gli stati e attività. È possibile creare un profilo di rilevamento per specificare gli eventi ai quali si è interessati.

Nota

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

Creazione del profilo di rilevamento personalizzato

L'esempio illustra come creare un profilo di rilevamento personalizzato. Questo profilo è inserito nel database di rilevamento SQL per rilevare gli eventi specificati. Il profilo di rilevamento viene creato utilizzando il modello a oggetti del profilo di rilevamento.

Il modello a oggetti del profilo di rilevamento fornisce un insieme di classi che consente di creare il track point dell'istanza (WorkflowTrackPoint), i track point dell'attività (ActivityTrackPoint) e i track point dell'utente (UserTrackPoint). Ciascun track point contiene anche un insieme di percorsi corrispondenti (WorkflowTrackingLocation, ActivityTrackingLocation e UserTrackingLocation). Un percorso corrispondente descrive l'evento da rilevare (diverso a seconda se si tratta di un track point dell'istanza o un track point dell'attività) e l'attività (o il flusso di lavoro nel caso di un track point dell'istanza) da rilevare.

I dati da estrarre possono essere specificati anche nel track point. In questo esempio, non è stato specificato alcun dato da estrarre.

Per creare il profilo di rilevamento, utilizzare il codice riportato di seguito:

TrackingProfile profile = new TrackingProfile();
ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation trackingLocation = new ActivityTrackingLocation(typeof(Activity));
trackingLocation.MatchDerivedTypes = true;

foreach (ActivityExecutionStatus status in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
    trackingLocation.ExecutionStatusEvents.Add(status);
}

trackPoint.MatchingLocations.Add(trackingLocation);
profile.ActivityTrackPoints.Add(trackPoint);
profile.Version = new Version("3.0.0.0");

WorkflowTrackPoint wTrackPoint = new WorkflowTrackPoint();
WorkflowTrackingLocation wLocation = new WorkflowTrackingLocation();

foreach (TrackingWorkflowEvent wEvent in Enum.GetValues(typeof(TrackingWorkflowEvent)))
{
    wLocation.Events.Add(wEvent);
}

wTrackPoint.MatchingLocation = wLocation;
profile.WorkflowTrackPoints.Add(wTrackPoint);

TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder(),CultureInfo.InvariantCulture);
serializer.Serialize(writer, profile);
String trackingprofile = writer.ToString();

Nell'esempio di codice precedente, le ultime quattro righe specificano il modo in cui un profilo di rilevamento può essere serializzato in un formato XML; il profilo di rilevamento viene quindi aggiunto al database utilizzando la stored procedure UpdateTrackingProfile.

Dopo la serializzazione, il profilo di rilevamento avrà il seguente aspetto:

<?xml version="1.0" encoding="utf-16" standalone="yes"?>

<TrackingProfile xmlns="https://schemas.microsoft.com/winfx/2006/workflow/trackingprofile" version="3.0.0.0">

<TrackPoints>

<WorkflowTrackPoint>

<MatchingLocation>

<WorkflowTrackingLocation>

<TrackingWorkflowEvents>

<TrackingWorkflowEvent>Created</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Completed</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Idle</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Suspended</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Resumed</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Persisted</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Unloaded</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Loaded</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Exception</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Terminated</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Aborted</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Changed</TrackingWorkflowEvent>

<TrackingWorkflowEvent>Started</TrackingWorkflowEvent>

</TrackingWorkflowEvents>

</WorkflowTrackingLocation>

</MatchingLocation>

</WorkflowTrackPoint>

<ActivityTrackPoint>

<MatchingLocations>

<ActivityTrackingLocation>

<Activity>

<Type>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<ExecutionStatusEvents>

<ExecutionStatus>Initialized</ExecutionStatus>

<ExecutionStatus>Executing</ExecutionStatus>

<ExecutionStatus>Canceling</ExecutionStatus>

<ExecutionStatus>Closed</ExecutionStatus>

<ExecutionStatus>Compensating</ExecutionStatus>

<ExecutionStatus>Faulting</ExecutionStatus>

</ExecutionStatusEvents>

</ActivityTrackingLocation>

</MatchingLocations>

</ActivityTrackPoint>

</TrackPoints>

</TrackingProfile>

Il profilo di rilevamento viene creato utilizzando lo schema del profilo di rilevamento.

Inserimento del profilo di rilevamento nel database di rilevamento SQL

Il profilo di rilevamento viene inserito nel database del profilo di rilevamento utilizzando la stored procedure UpdateTrackingProfile. La stored procedure archivia il profilo per un determinato tipo di flusso di lavoro. Quando il runtime richiede un profilo per il tipo al servizio di rilevamento, il servizio di rilevamento restituisce il profilo personalizzato anziché il profilo predefinito.

Registrazione del servizio di rilevamento con l'host del flusso di lavoro

Utilizzare il codice riportato di seguito per registrare un servizio di rilevamento con il runtime del flusso di lavoro:

WorkflowRuntime wRuntime = new WorkflowRuntime();
wRuntime.AddService(new SqlTrackingService(connectionString));
wRuntime.StartRuntime();

La seconda riga registra il servizio di rilevamento SQL con il runtime del flusso di lavoro. La stringa di connessione è quella del database di rilevamento.

Recupero delle informazioni di rilevamento

Una volta salvate nel database, le informazioni di rilevamento possono essere recuperate utilizzando un oggetto SqlTrackingQuery e utilizzando il metodo TryGetWorkflow.

Creazione del database di rilevamento

I servizi SQL installati da Windows Workflow Foundation utilizzano Microsoft SQL Server per archiviare le informazioni. Per queste attività è possibile utilizzare Microsoft SQL Server 2005 Express, SQL Server 2000 o versioni più recenti o SQL Server 2000 Desktop Engine (MSDE).

Il programma di installazione di Windows Workflow Foundation non installa i database richiesti da questi servizi; tuttavia, il programma di installazione installa gli script SQL per la creazione e la configurazione dei database per tali servizi.

Per creare il database di rilevamento SQL

  1. Se si utilizza Microsoft SQL Server 2005 Express, SQL Server 2000 o versioni più recenti oppure SQL Server 2000 Desktop Engine (MSDE), creare un nuovo database denominato Tracking utilizzando l'istruzione della query SQL:

    CREATE DATABASE Tracking

    Nota   Se si utilizzano SqlTrackingService e SqlWorkflowPersistenceService in un'applicazione del flusso di lavoro, è consigliabile utilizzare un unico database per la persistenza e il rilevamento.

  2. Nell'area di lavoro SQL Query Analyzer, selezionare il database creato al passaggio 1 nell'elenco di database disponibili.

  3. Nel menu File, fare clic su Apri e aprire lo script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lingua>\Tracking_Schema.sql.

  4. Eseguire la query facendo clic su Esegui o premendo F5 per creare le tabelle del servizio di rilevamento SQL.

  5. Nel menu File, fare clic su Apri e aprire lo script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lingua>\Tracking_Logic.sql.

  6. Eseguire la query facendo clic su Esegui o premendo F5 per creare le stored procedure del servizio di rilevamento SQL.

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 QueryUsingSqlTrackingService\bin\debug (o nella cartella QueryUsingSqlTrackingService\bin per la versione VB dell'esempio), collocata sotto la cartella principale dell'esempio.

Vedere anche

Riferimenti

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

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 ConsoleTrackingService
Esempio di RuleActionTrackingEvent
Esempio di servizio di rilevamento file e query
Esempio di utilizzo del modello a oggetti del profilo di rilevamento
Windows Workflow Tracking Services

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.