다음을 통해 공유


Query Using SQLTrackingService 샘플

Download sample

이 샘플에서는 Windows Workflow Foundation에서 제공하는 SQL 추적 서비스를 사용하여 워크플로 실행을 추적하는 방법을 보여 줍니다.

워크플로 런타임은 워크플로를 실행 중일 때 특정 이벤트를 발생시킵니다. 추적 서비스는 이러한 이벤트를 catch하고 관련 정보를 SQL Server 데이터베이스에 저장할 수 있습니다.

워크플로 런타임은 다음 형식의 이벤트를 발생시킵니다.

  • 워크플로 인스턴스 수준 이벤트. 이 이벤트는 워크플로 인스턴스가 특정 상태가 될 때 발생합니다. 예를 들어 워크플로 인스턴스가 초기화될 때 또는 실행 중일 때 이벤트가 발생합니다.

  • 활동 수준 이벤트. 워크플로는 여러 활동으로 구성되며, 각 활동은 수명 주기를 따릅니다. 활동은 수명 주기 동안 다양한 상태를 거칩니다. 활동이 특정 상태에 도달하면 이벤트가 발생합니다.

  • 사용자 추적 이벤트. 워크플로 작성자는 사용자 지정 추적 이벤트를 만들어 이를 워크플로의 코드 병행에 추가할 수 있습니다.

워크플로 데이터 컨텍스트의 데이터를 내보내고 이벤트와 함께 추적 서비스에 제공할 수 있습니다.

워크플로를 추적할 때 일부 상태와 활동에 대한 일부 이벤트에는 관심이 없을 수 있습니다. 관심 대상 이벤트를 지정하도록 추적 프로필을 만들 수 있습니다.

참고

추적 데이터의 시간 값은 협정 세계시(그리니치 표준시)입니다.

사용자 지정 추적 프로필 만들기

이 샘플에서는 사용자 지정 추적 프로필을 만드는 방법을 보여 줍니다. 이 프로필은 지정된 이벤트를 추적하기 위해 SQL 추적 데이터베이스에 삽입됩니다. 추적 프로필은 추적 프로필 개체 모델을 사용하여 만듭니다.

추적 프로필 개체 모델은 인스턴스 추적 지점(WorkflowTrackPoint), 활동 추적 지점(ActivityTrackPoint) 및 사용자 추적 지점(UserTrackPoint)을 만드는 데 도움이 되는 클래스의 집합을 제공합니다. 각 추적 지점은 일치하는 위치(WorkflowTrackingLocation, ActivityTrackingLocationUserTrackingLocation)의 집합을 포함합니다. 일치하는 위치는 추적할 이벤트와 추적할 활동 또는 워크플로(인스턴스 추적 지점의 경우)를 설명합니다. 여기서 추적할 이벤트는 위치가 인스턴스 추적 지점인지 활동 추적 지점인지에 따라 달라집니다.

추출할 데이터 역시 추적 지점에서 지정할 수 있습니다. 이 예제에서는 데이터 추출이 지정되지 않았습니다.

다음 코드를 사용하여 추적 프로필을 만듭니다.

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

위의 코드 예제에서 마지막 네 줄은 추적 프로필을 XML 형식으로 serialize하는 방법을 지정합니다. 그런 다음 UpdateTrackingProfile 저장 프로시저를 사용하여 추적 프로필이 데이터베이스에 추가됩니다.

추적 프로필을 serialize하면 다음과 같이 됩니다.

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

추적 프로필은 추적 프로필 스키마를 사용하여 만듭니다.

SQL 추적 데이터베이스에 추적 프로필 삽입

UpdateTrackingProfile 저장 프로시저를 사용하여 추적 프로필 데이터베이스에 추적 프로필을 삽입합니다. 저장 프로시저는 특정 워크플로 유형에 대해 이 프로필을 저장합니다. 런타임에서 해당 유형의 프로필에 대한 추적 서비스를 요청하면 이 추적 서비스는 기본 프로필 대신 이 사용자 지정 프로필을 반환합니다.

워크플로 호스트에 추적 서비스 등록

다음 코드를 사용하여 추적 서비스를 워크플로 런타임에 등록합니다.

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

두 번째 줄이 워크플로 런타임에 SQL 추적 서비스를 등록하는 코드입니다. 연결 문자열은 추적 데이터베이스의 연결 문자열입니다.

추적 정보 검색

추적 정보가 데이터베이스에 저장되고 나면 SqlTrackingQuery 개체와 TryGetWorkflow 메서드를 사용하여 이 정보를 검색할 수 있습니다.

추적 데이터베이스 만들기

Windows Workflow Foundation으로 설치되는 SQL 서비스는 Microsoft SQL Server를 사용하여 정보를 저장합니다. 이러한 작업에 Microsoft SQL Server 2005 Express, SQL Server 2000 이상 버전 또는 SQL Server 2000 Desktop Engine(MSDE)을 사용할 수 있습니다.

Windows Workflow Foundation 설치 프로그램은 이러한 서비스에 필요한 데이터베이스를 설치하지 않지만, 이러한 서비스에 대한 데이터베이스를 만들고 구성하기 위한 SQL 스크립트를 설치합니다.

SQL 추적 데이터베이스를 만들려면

  1. Microsoft SQL Server 2005 Express, SQL Server 2000 이상 버전 또는 MSDE(SQL Server 2000 Desktop Engine)에서 다음과 같은 SQL 쿼리문을 사용하여 이름이 Tracking인 새 데이터베이스를 만듭니다.

    CREATE DATABASE Tracking

    참고   워크플로 응용 프로그램에서 SqlTrackingServiceSqlWorkflowPersistenceService를 모두 사용할 경우 유지와 추적 모두에 단일 데이터베이스를 사용하는 것이 좋습니다.

  2. SQL 쿼리 분석기 작업 영역의 사용 가능한 데이터베이스 목록에서 1단계에서 만든 데이터베이스를 선택합니다.

  3. 파일 메뉴에서 열기를 클릭하고 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\Tracking_Schema.sql을 엽니다.

  4. 실행을 클릭하거나 F5 키를 눌러 쿼리를 실행하여 SQL 추적 서비스 테이블을 만듭니다.

  5. 파일 메뉴에서 열기를 클릭하고 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\Tracking_Logic.sql을 엽니다.

  6. 실행을 클릭하거나 F5 키를 눌러 쿼리를 실행하여 SQL 추적 서비스 저장 프로시저를 만듭니다.

이 샘플을 빌드하려면

  1. 샘플 다운로드를 클릭하여 샘플을 다운로드합니다.

    이렇게 하면 샘플 프로젝트가 로컬 하드 디스크에 추출됩니다.

  2. 시작을 클릭하고 프로그램, Microsoft Windows SDK를 차례로 가리킨 다음 CMD 셸을 클릭합니다.

  3. 샘플의 소스 디렉터리로 이동합니다.

  4. 명령 프롬프트에서 **MSBUILD <Solution file name>**을 입력합니다.

이 샘플을 실행하려면

  • SDK 명령 프롬프트 창에서 샘플의 주 폴더 아래에 있는 QueryUsingSqlTrackingService\bin\debug 폴더 또는 QueryUsingSqlTrackingService\bin 폴더(VB 버전의 샘플의 경우)의 .exe 파일을 실행합니다.

참고 항목

참조

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

기타 리소스

추적 샘플
Simple Tracking 샘플
Query Using SQLTrackingService 샘플
Tracking Using User Track Points 샘플
EventArgs Tracking 샘플
ConsoleTrackingService 샘플
RuleActionTrackingEvent 샘플
File Tracking Service and Query 샘플
Using the Tracking Profile Object Model 샘플
Windows Workflow Tracking Services

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.