Ejemplo de consulta mediante SQLTrackingService

Download sample

En este ejemplo se muestra el uso del servicio de seguimiento de SQL proporcionado por Windows Workflow Foundation para realizar el seguimiento de la ejecución de un flujo de trabajo.

El motor en tiempo de ejecución de flujos de trabajo provoca ciertos eventos mientras está ejecutando un flujo de trabajo. El servicio de seguimiento puede detectar estos eventos y almacenar información sobre ellos en una base de datos de SQL Server.

El tiempo de ejecución del flujo de trabajo provoca los tipos de eventos siguientes:

  • Eventos de flujo de trabajo del nivel de instancia. Estos eventos se provocan cuando una instancia de flujo de trabajo entra en un estado determinado. Por ejemplo, se provoca un evento cuando la instancia de flujo de trabajo se inicializa o cuando está en ejecución.

  • Eventos del nivel de actividad. Un flujo de trabajo consta de actividades y cada actividad sigue un ciclo de vida. Durante su ciclo de vida, la actividad atraviesa varios estados. Se provoca un evento cuando una actividad llega a un estado determinado.

  • Eventos supervisados por el usuario. El autor de un flujo de trabajo puede crear eventos de seguimiento personalizados y agregarlos al código lateral del flujo de trabajo.

Se pueden emitir los datos del contexto de datos del flujo de trabajo, y entregarlos al servicio de seguimiento junto con los eventos.

Al estar realizando el seguimiento de un flujo de trabajo, podrían no interesarle todos los eventos para todos los estados y actividades. Puede crear un perfil del seguimiento para especificar los eventos que le interesan.

Nota

El valor de hora para realizar el seguimiento de los datos se expresa en hora universal coordinada (Hora media de Greenwich).

Crear el perfil del seguimiento personalizado

En el ejemplo se muestra cómo crear un perfil del seguimiento personalizado. Este perfil se inserta en la base de datos de seguimiento de SQL para realizar el seguimiento de los eventos especificados. El perfil del seguimiento se crea utilizando el modelo de objetos de perfil de seguimiento.

El modelo de objetos de perfil de seguimiento proporciona un conjunto de clases que ayudan a crear el punto de seguimiento de la instancia (WorkflowTrackPoint), puntos de seguimiento de actividades (ActivityTrackPoint) y puntos de seguimiento de usuario (UserTrackPoint). Cada punto del seguimiento también contiene un conjunto de ubicaciones coincidentes (WorkflowTrackingLocation, ActivityTrackingLocation y UserTrackingLocation). Una ubicación coincidente describe el evento que cuyo seguimiento se va a realizar (distinto en función de que sea un punto de seguimiento de la instancia o un punto de seguimiento de la actividad) y la actividad (o flujo de trabajo en el caso de un punto de seguimiento de la instancia) cuyo seguimiento se va a realizar.

Los datos que se van a extraer también se pueden especificar en el punto de seguimiento. En este ejemplo, no se han especificado datos para su extracción.

Utilice el código siguiente para crear el perfil de seguimiento:

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

En el ejemplo de código anterior, las últimas cuatro líneas especifican cómo se puede serializar el perfil del seguimiento en un formato XML; el perfil del seguimiento se agrega a continuación a la base de datos utilizando el procedimiento almacenado UpdateTrackingProfile.

Una vez que se ha serializado, el perfil del seguimiento tiene el aspecto siguiente:

<?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>

El perfil del seguimiento se crea utilizando el esquema de perfiles de seguimiento.

Insertar el perfil de seguimiento en la base de datos de seguimiento de SQL

El perfil de seguimiento se inserta en la base de datos de perfiles de seguimiento utilizando el procedimiento almacenado UpdateTrackingProfile. El procedimiento almacenado almacena el perfil para un tipo de flujo de trabajo determinado. Cuando el tiempo de ejecución pide al servicio de seguimiento un perfil para el tipo, el servicio de seguimiento devuelve este perfil personalizado en lugar del perfil predeterminado.

Registrar el servicio de seguimiento con el host del flujo de trabajo

Use el código siguiente para registrar un servicio de seguimiento con el tiempo de ejecución del flujo de trabajo:

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

La segunda línea registra el servicio de seguimiento de SQL con el tiempo de ejecución del flujo de trabajo. La cadena de conexión es la cadena de conexión de la base de datos de seguimiento.

Recuperar la información de seguimiento

Una vez guardada en la base de datos la información de seguimiento, se puede recuperar utilizando un objeto SqlTrackingQuery, mediante el método TryGetWorkflow.

Crear la base de datos de seguimiento

Los servicios SQL instalados por Windows Workflow Foundation utilizan Microsoft SQL Server para almacenar información. Puede utilizar Microsoft SQL Server 2005 Express, SQL Server 2000 o versiones posteriores, o SQL Server 2000 Desktop Engine (MSDE) para estas tareas.

El programa de instalación de Windows Workflow Foundation no instala las bases de datos necesarias para estos servicios; sin embargo, el programa de instalación instala los scripts de SQL para crear y configurar las bases de datos para estos servicios.

Para crear la base de datos de seguimiento de SQL

  1. Utilice Microsoft SQL Server 2005 Express, SQL Server 2000 o versiones posteriores, o SQL Server 2000 Desktop Engine (MSDE), para crear una base de datos nueva denominada Tracking mediante la instrucción de consulta de SQL:

    CREATE DATABASE Tracking

    Nota   Cuando se utiliza tanto SqlTrackingService como SqlWorkflowPersistenceService en una aplicación de flujo de trabajo, es recomendable utilizar una única base de datos tanto para persistencia como para seguimiento.

  2. En el área de trabajo del Analizador de consultas SQL, seleccione la base de datos que creó en el paso 1, en la lista de bases de datos disponibles.

  3. En el menú Archivo, haga clic en Abrir y abra el script de SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lenguaje>\Tracking_Schema.sql.

  4. Ejecute la consulta haciendo clic en Ejecutar o presionando F5 para crear las tablas del servicio de seguimiento de SQL.

  5. En el menú Archivo, haga clic en Abrir y abra el script de SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lenguaje>\Tracking_Logic.sql.

  6. Ejecute la consulta haciendo clic en Ejecutar o presionando F5 para crear los procedimientos almacenados del servicio de seguimiento de SQL.

Para generar el ejemplo

  1. Para descargar el ejemplo, haga clic en Descargar ejemplo.

    Así se extrae el proyecto de ejemplo en su disco duro local.

  2. Haga clic en Inicio, señale Programas, señale Microsoft Windows SDK y, a continuación, haga clic en CMD Shell.

  3. Vaya al directorio de origen del ejemplo.

  4. En el símbolo del sistema, escriba MSBUILD <nombre del archivo de solución>.

Para ejecutar el ejemplo

  • En la ventana del símbolo del sistema del SDK, ejecute el archivo .exe de la carpeta QueryUsingSqlTrackingService\bin\debug (o la carpeta QueryUsingSqlTrackingService\bin para la versión de VB del ejemplo), que se encuentra bajo la carpeta principal del ejemplo.

Consulte también

Referencia

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

Otros recursos

Ejemplos de seguimiento
Ejemplo de seguimiento simple
Ejemplo de consulta mediante SQLTrackingService
Ejemplo de seguimiento mediante puntos de seguimiento del usuario
Ejemplo de seguimiento de EventArgs
Ejemplo de ConsoleTrackingService
Ejemplo de RuleActionTrackingEvent
Ejemplo de servicio de seguimiento y de consulta
Usar el modelo de objetos de perfil de seguimiento (ejemplo)
Windows Workflow Tracking Services

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.