Abfragen von SqlTrackingService-Daten mit SqlTrackingQuery
Die SqlTrackingQuery-Klasse stellt Methoden und Eigenschaften bereit, mit denen Sie auf bestimmte Arten von Überwachungsdaten, die in der SqlTrackingService-Datenbank gespeichert sind, zugreifen können. SqlTrackingWorkflowInstance-Objekte ermöglichen den Zugriff auf diese Daten. Sie können die TryGetWorkflow-Methode aufrufen, um ggf. eine SqlTrackingWorkflowInstance für eine bestimmte Workflowinstanz abzurufen. Zudem kann optional die GetWorkflows-Methode aufgerufen werden, um eine Auflistung von SqlTrackingWorkflowInstance-Objekten zu erhalten. Die Objekte entsprechen Workflowinstanzen, deren Überwachungsdaten mit einer Reihe von Abfrageparametern übereinstimmen, die in einem SqlTrackingQueryOptions-Objekt enthalten sind, das als Parameter an die Methode übergeben wird. Weitere Informationen zu den verfügbaren Überwachungsdaten finden Sie in der SqlTrackingWorkflowInstance-Klasse. Weitere Informationen zur Art der möglichen Abfragen finden Sie in der SqlTrackingQueryOptions-Klasse.
Verwenden von SqlTrackingQuery
Sie erstellen eine Instanz der SqlTrackingQuery-Klasse, indem Sie eine Verbindungszeichenfolge für die Überwachungsdatenbank übergeben. Sie können anschließend entweder die TryGetWorkflow-Methode oder die GetWorkflows-Methode aufrufen, um entweder ein SqlTrackingWorkflowInstance-Objekt oder eine Auflistung von SqlTrackingWorkflowInstance-Objekten abzurufen. Die ActivityEvents-Eigenschaft beinhaltet eine Auflistung von ActivityTrackingRecord-Objekten, die Überwachungsinformationen für die Aktivitäten im Workflow enthalten. Zudem können auf dieselbe Weise Workflowinstanzereignisse durch Prüfen der WorkflowTrackingRecord-Objekte in der WorkflowEvents-Auflistung überwacht werden. Für Benutzerereignisse, die durch Aufrufen der TrackData-Methode eingefügt werden, sind UserTrackingRecord-Objekte in der UserEvents-Auflistung enthalten, die auch in der SqlTrackingWorkflowInstance-Klasse definiert ist.
Zugreifen auf die Überwachungsdatenbank
Im folgenden Beispiel sehen Sie, wie mit einem SqlTrackingQuery-Objekt auf die SqlTrackingService-Überwachungsdatenbank zugegriffen wird. In diesem Beispiel wird SqlTrackingWorkflowInstance durch Aufrufen der TryGetWorkflow-Methode und durch Übergeben einer Instanz-ID eines wichtigen Workflows abgerufen. Anschließend wird im Beispiel die WorkflowEvents-Auflistung aufgeführt, und die Informationen, die in jedem WorkflowTrackingRecord enthalten sind, werden ausgegeben.
Hinweis
Wenn Sie die SqlTrackingQuery-Klasse verwenden möchten, stellen Sie sicher, dass die Workflowtypen, für die eine Abfrage erstellt wurde, erkannt werden können. Befinden sich die Typen im globalen Assemblycache (GAC) oder im selben Verzeichnis wie die Anwendung, werden die Typen automatisch aufgelöst. Ist dies nicht der Fall, stellen Sie einen benutzerdefinierten Typresolver bereit, und behandeln Sie das Laden der Typen, um einen ordnungsgemäßen Vorgang zu gewährleisten.
Hinweis
Wird versucht die SqlTrackingQuery-Klasse zu verwenden und ist der SQL Server, zu dem die Klasse eine Verbindung herstellt, nicht aktiv oder vorübergehend nicht verfügbar, löst die SqlTrackingQuery-Klasse SqlException aus und unternimmt keinen weiteren Versuch, eine Verbindung mit der Datenbank herzustellen. Sie können diese Ausnahme abfangen, um eine eigene Wiederholungslogik zu implementieren.
static void GetInstanceTrackingEvents(Guid instanceId)
{
SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);
SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;
sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance);
Console.WriteLine("\nInstance Level Events:\n");
foreach (WorkflowTrackingRecord workflowTrackingRecord in
sqlTrackingWorkflowInstance.WorkflowEvents)
{
Console.WriteLine("EventDescription : {0} DateTime : {1}",
workflowTrackingRecord.TrackingWorkflowEvent,
workflowTrackingRecord.EventDateTime);
}
}
In diesem nächsten Beispiel wird die gleiche Methodik verwendet, um Aktivitätsebenenereignisse aus einem SqlTrackingWorkflowInstance-Objekt zu extrahieren. Allerdings wird nicht die WorkflowEvents-Auflistung aufgeführt, sondern die ActivityEvents-Auflistung verwendet.
static void GetActivityTrackingEvents(Guid instanceId)
{
SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);
SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;
sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance);
Console.WriteLine("\nActivity Tracking Events:\n");
foreach (ActivityTrackingRecord activityTrackingRecord in
sqlTrackingWorkflowInstance.ActivityEvents)
{
Console.WriteLine(
"StatusDescription: {0} DateTime: {1} Activity Qualified ID: {2}",
activityTrackingRecord.ExecutionStatus,
activityTrackingRecord.EventDateTime,
activityTrackingRecord.QualifiedName);
}
}
Siehe auch
Referenz
SqlTrackingQuery
SqlTrackingService
SqlTrackingQueryOptions
SqlTrackingWorkflowInstance
Konzepte
Windows Workflow-Überwachungsdienste
Verwenden von SqlTrackingService
Weitere Ressourcen
Simple Tracking Sample
Query Using SQLTrackingService Sample
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.