다음을 통해 공유


SqlTrackingQuery로 SqlTrackingService 데이터 쿼리

SqlTrackingQuery 클래스는 SqlTrackingService 데이터베이스에 저장된 특정 유형의 추적 데이터에 액세스하는 데 사용할 수 있는 메서드와 속성을 제공합니다. 이 데이터에는 SqlTrackingWorkflowInstance 개체를 통해 액세스할 수 있습니다. TryGetWorkflow 메서드를 호출하여 특정 워크플로 인스턴스에 대한 SqlTrackingWorkflowInstance를 가져올 수 있습니다. GetWorkflows 메서드를 선택적으로 호출하여 메서드에 매개 변수로 전달된 SqlTrackingQueryOptions 개체에 포함된 쿼리 매개 변수 집합과 일치하는 추적 데이터가 포함된 워크플로 인스턴스에 해당하는 SqlTrackingWorkflowInstance 개체 컬렉션을 가져올 수도 있습니다. 사용 가능한 추적 데이터에 대한 자세한 내용은 SqlTrackingWorkflowInstance 클래스를 참조하십시오. 수행할 수 있는 쿼리 유형에 대한 자세한 내용은 SqlTrackingQueryOptions 클래스를 참조하십시오.

SqlTrackingQuery 사용

추적 데이터베이스에 대한 연결 문자열을 전달하여 SqlTrackingQuery 클래스의 인스턴스를 만든 다음 TryGetWorkflow 또는 GetWorkflows 메서드를 호출하여 SqlTrackingWorkflowInstance 개체나 SqlTrackingWorkflowInstance 개체 컬렉션을 검색할 수 있습니다. ActivityEvents 속성에는 워크플로의 활동에 대한 추적 정보가 포함된 ActivityTrackingRecord 개체의 컬렉션이 포함되어 있습니다. 또한 동일한 절차를 통해 WorkflowEvents 컬렉션에 포함된 WorkflowTrackingRecord 개체를 검사하여 워크플로 인스턴스 이벤트를 추적할 수 있습니다. TrackData 메서드를 호출하여 삽입되는 사용자 이벤트에 대한 UserTrackingRecord 개체는 SqlTrackingWorkflowInstance 클래스에도 정의되어 있는 UserEvents 컬렉션에 포함되어 있습니다.

추적 데이터베이스 액세스

다음 예제에서는 SqlTrackingQuery 개체를 사용하여 SqlTrackingService 추적 데이터베이스에 액세스하는 방법을 보여 줍니다. 이 예제에서는 TryGetWorkflow 메서드를 호출하고 해당하는 워크플로의 인스턴스 ID를 전달하여 SqlTrackingWorkflowInstance를 검색합니다. 이 작업이 완료된 후 예제에서는 WorkflowEvents 컬렉션을 열거하고 각 WorkflowTrackingRecord에 포함된 정보를 출력합니다.

참고

SqlTrackingQuery 클래스를 사용하려면 해당 클래스가 쿼리할 워크플로 형식을 검색할 수 있는지 확인해야 합니다. 형식이 GAC(전역 어셈블리 캐시)에 있거나 응용 프로그램과 동일한 디렉터리에 있으면 형식이 자동으로 확인되고, 그렇지 않으면 사용자 지정 형식 확인자를 제공하고 형식의 로딩을 처리하여 올바른 작업을 보장해야 합니다.

참고

SqlTrackingQuery 클래스를 사용하려는 경우 이 클래스가 연결하는 SQL Server가 작동하지 않거나 일시적으로 사용할 수 없으면 SqlTrackingQuery 클래스가 SqlException을 throw하고 데이터베이스에 다시 연결하려고 하지 않습니다. 이 예외를 catch하여 재시도 논리를 직접 구현할 수 있습니다.

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

다음 예제에서는 동일한 방법을 사용하여 SqlTrackingWorkflowInstance 개체에서 활동 수준 이벤트를 추출합니다. 그러나 WorkflowEvents 컬렉션을 열거하는 대신 ActivityEvents 컬렉션을 사용합니다.

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

참고 항목

참조

SqlTrackingQuery
SqlTrackingService
SqlTrackingQueryOptions
SqlTrackingWorkflowInstance

개념

Windows Workflow 추적 서비스
SqlTrackingService 사용

기타 리소스

Simple Tracking Sample
Query Using SQLTrackingService Sample

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.