추적 프로필 만들기 및 사용
추적 프로필은 관심이 있는 추적 정보만 받도록 추적 정보를 필터링하는 데 사용됩니다. 이 작업을 수행하기 위해 추적 서비스는 TrackingProfile 개체를 사용하여 추적 정보를 요청합니다. 새 워크플로 인스턴스가 시작되면 추적 프레임워크에서 런타임에 등록된 각 추적 서비스에 대해 TryGetProfile을 호출합니다. 워크플로 인스턴스의 형식은 이 호출에 대한 매개 변수로 제공됩니다. 추적 서비스는 문제의 인스턴스에 대한 추적 정보(대개 실행 중인 인스턴스의 형식으로 결정됨)를 받으려는 경우 true를 반환하고 TrackingProfile 개체를 out 매개 변수로 지정합니다. TrackingProfile 개체에는 추적 서비스가 받을 이벤트와 데이터를 추적 런타임에 알려주는 정보가 포함되어 있습니다. 추적 프레임워크에서는 추적 프로필에 지정된 이벤트를 받을 때 추적 채널을 사용하여 이벤트 정보를 추적 서비스에 보냅니다.
추적 프로필은 Windows Workflow Foundation에 정의된 TrackingProfile 스키마를 사용하는 XML 파일로 표현될 수 있습니다. 추적 프로필에는 세부 사항을 요약하는 복잡한 개체 모델도 있습니다. 개체 모델이나 XML을 사용하여 추적 프로필을 만들 수 있습니다. 그러나 런타임에서 TrackingProfile 개체를 기대하기 때문에 XML 형태로 표현된 추적 프로필은 TrackingProfile 개체로 deserialize되어야 합니다.
경고
추적 프로필에서 영어가 아닌 변수를 사용하는 경우 유니코드 인코딩을 사용하여 추적 프로필 파일을 저장해야 합니다.
추적 프로필 개체 모델 요소
TrackingProfile 개체를 사용하여 워크플로 인스턴스 이벤트, 개별 활동 이벤트 및 사용자 지정 사용자 이벤트를 추적할 수 있습니다. 추적 프로필 개체 모델에서는 다양한 개체를 사용하여 추적 서비스가 런타임 엔진에서 받는 정보를 세부적으로 제어할 수 있도록 하는 추적 프로필을 생성합니다.
추적 지점
TrackingProfile에는 세 가지 유형의 추적 지점이 포함되어 있습니다. 세 가지 종류의 추적 이벤트가 필터링될 수 있습니다.
활동 상태 이벤트
워크플로 상태 이벤트
사용자 이벤트
WorkflowTrackPoint 개체를 WorkflowTrackPoints 속성에 추가하여 특정 워크플로 상태 이벤트를 일치시키고 ActivityTrackPoint 개체를 ActivityTrackPoints 속성에 추가하여 특정 활동 상태 이벤트를 일치시킬 수 있으며 UserTrackPoint 개체를 UserTrackPoints 속성에 추가하여 특정 사용자 이벤트를 일치시킬 수 있습니다.
WorkflowTrackPoint
워크플로 인스턴스의 상태가 변경될 때마다 워크플로 인스턴스는 런타임 추적 인프라에 대한 TrackingWorkflowEvent 값 중 하나를 기반으로 워크플로 상태 이벤트를 내보냅니다. WorkflowTrackPoint는 특정 형식의 워크플로 상태 이벤트가 발생하는 워크플로 인스턴스를 실행하는 동안 모든 지점에 관심을 정의합니다. 이러한 상태 이벤트는 WorkflowTrackPoint의 MatchingLocation 속성에 정의됩니다. 추적 위치와 WorkflowTrackPoint의 관계에 대한 자세한 내용은 이 항목의 "추적 위치" 단원을 참조하십시오.
WorkflowTrackPoint는 Annotations를 추가하여 런타임 추적 인프라에서 전송되어야 하는 연결된 추가 정보도 지정할 수 있습니다. 주석은 WorkflowTrackPoint과 연결할 정보가 포함된 사용자 정의 문자열입니다. 예를 들어, 주석은 워크플로가 이 추적 지점에서 사용할 수 있는 실행 경로에 대한 정보를 포함하거나 응용 프로그램에 표시될 정보를 포함할 수 있습니다.
ActivityTrackPoint
활동의 상태가 변경될 때마다 워크플로 인스턴스는 런타임 추적 인프라에 대한 ActivityExecutionStatus 값 중 하나를 기반으로 활동 상태 이벤트를 내보냅니다. ActivityTrackPoint는 이러한 활동 상태 이벤트로 한정된 루트 워크플로의 잠재적 실행 경로에 관심 지점을 정의합니다. ActivityTrackPoint는 MatchingLocations 속성을 사용하여 일치에 포함되는 위치, ExcludedLocations 속성을 사용하여 일치에서 제외되는 위치 및 Extracts 속성을 사용하여 추적 지점이 일치할 때 워크플로 인스턴스에서 추출되어야 하는 데이터를 포함합니다.
Extracts 속성은 ActivityDataTrackingExtract 또는 WorkflowDataTrackingExtract 개체가 포함된 ExtractCollection입니다. ActivityDataTrackingExtract 개체를 ExtractCollection에 추가하면 Member 속성은 활동의 필드나 속성, 이러한 필드나 속성의 멤버 또는 IEnumerable 인터페이스를 구현하는 필드나 속성의 단일 요소(또는 멤버)를 가리킵니다. ActivityTrackPoint가 일치하면 멤버의 값이 연결된 ActivityTrackingRecord의 Body 속성에 배치됩니다. WorkflowDataTrackingExtract 개체를 사용하여 이 특정 활동 이벤트 중에 워크플로의 멤버를 추출할 수 있습니다.
UserTrackPoint
활동 디자이너나 워크플로 디자이너는 오버로드된 System.Workflow.ComponentModel.Activity.TrackData(System.Object) 및 System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) 메서드를 사용하여 데이터를 사용자 이벤트로 런타임 추적 인프라에 내보낼 워크플로를 계측할 수 있습니다. 내보낸 데이터를 사용자 데이터라고 합니다. 상태가 변경될 때만 발생하는 활동 상태 이벤트 및 워크플로 상태 이벤트와 달리 사용자 이벤트는 워크플로에서 계측되는 모든 위치에서 발생할 수 있습니다. 사용자 이벤트를 내보내는 워크플로를 계측하는 이유는 여러 가지입니다. 예를 들어, 워크플로 디자이너가 워크플로 진행률에 대한 논리적 상태 정보를 전달하려고 하거나 활동 디자이너가 활동 상태 변경 이외의 경우에 활동 멤버에 기회를 제공하려고 할 수 있습니다.
UserTrackPoint는 사용자 이벤트와 연결된 루트 워크플로 인스턴스의 잠재적 실행 경로에 관심 지점을 정의합니다. UserTrackPoint는 일치에 포함되는 위치, 일치에서 제외되는 위치 및 추적 지점이 일치할 때 워크플로 인스턴스에서 추출되어야 하는 추가 데이터를 포함합니다. UserTrackPoint를 System.Workflow.Runtime.Tracking.TrackingProfile.UserTrackPoints에 추가하여 추적 지점이 일치할 때 UserTrackingRecord를 추적 서비스로 보내도록 런타임 추적 인프라에 지시할 수 있습니다. 사용자 데이터는 System.Workflow.Runtime.Tracking.UserTrackingRecord.UserData에 반환됩니다. 한 UserTrackPoint가 워크플로 인스턴스의 여러 지점에서 일치할 수 있습니다.
UserTrackingLocation은 워크플로 인스턴스의 잠재적 실행 경로에 있는 사용자 이벤트와 연결된 위치에 대한 일치 조건을 포함합니다. UserTrackingLocation 개체를 MatchingLocations에 추가하여 추적 지점 일치에 포함되어야 하는 위치를 정의할 수 있습니다. 마찬가지로 UserTrackingLocation 개체를 ExcludedLocations에 추가하여 추적 지점 일치에서 제외되어야 하는 위치를 정의할 수 있습니다. 추적 위치와 UserTrackPoint의 관계에 대한 자세한 내용은 이 항목의 "추적 위치" 단원을 참조하십시오.
ActivityDataTrackingExtract 개체와 WorkflowDataTrackingExtract 개체를 Extracts에 추가하여 추적 지점이 일치할 때 워크플로 인스턴스에서 제외되어야 하는 데이터를 지정할 수 있습니다. 추출된 데이터는 System.Workflow.Runtime.Tracking.UserTrackingRecord.Body에 반환됩니다.
Annotations에 추가하여 추적 지점과 연결된 추가 정보를 지정할 수 있습니다. 이러한 주석은 Annotations에 반환됩니다.
추적 위치
이전 단원에서는 추적 지점을 TrackingProfile과 연결하여 Windows Workflow Foundation 런타임 엔진에서 사용되는 추적 서비스에서 처리되는 이벤트 형식을 지정하는 방법에 대해 설명했습니다. 이러한 추적 지점에서는 추적 위치를 사용하여 워크플로 정의의 특정 형식을 일치시킵니다.
WorkflowTrackingLocation
WorkflowTrackingLocation은 워크플로 인스턴스의 상태가 변경될 때마다 발생하는 이벤트를 추적하는 데 사용됩니다. WorkflowTrackingLocation 클래스에 정의된 Events 속성을 사용하여 일치시킬 워크플로 상태 이벤트의 목록을 설정할 수 있습니다. 이러한 이벤트는 TrackingWorkflowEvent 열거형에 정의된 값의 조합일 수 있습니다.
ActivityTrackingLocation
ActivityTrackingLocation은 워크플로 인스턴스에서 활동의 상태가 변경될 때마다 발생하는 이벤트를 추적하는 데 사용됩니다. ActivityTrackingLocation은 ActivityTypeName 또는 ActivityType 속성에 지정된 활동에서 발생한 이벤트를 일치시킵니다. ActivityType 속성은 Type 개체를 지정할 때 사용됩니다. 그러나 ActivityTypeName 속성을 사용하여 참조 활동 유형의 정규화되지 않은 이름을 지정할 수 있습니다. 예를 들어, CodeActivity 활동의 정규화되지 않은 이름을 지정하려면 ActivityTypeName 속성을 "CodeActivity"로 설정합니다.
ActivityTrackingLocation 클래스에 정의된 ExecutionStatusEvents 속성을 사용하여 추적 서비스에서 처리되는 활동 수준 이벤트의 형식을 필터링할 수 있습니다. ExecutionStatusEvents 컬렉션의 ActivityExecutionStatus 값 중 하나 이상이 일치해야 하며, 일치하려면 Conditions 속성의 모든 TrackingCondition이 ActivityTrackingLocation에 대해 true여야 합니다. 목록이 비어 있으면 이벤트를 일치시키지 않도록 지정됩니다.
ActivityTrackingCondition을 사용하여 추적할 활동의 세분화 수준을 추가로 제어할 수 있습니다. ActivityTrackingCondition 클래스의 Member 속성은 속성이나 필드, 활동 속성 또는 필드의 멤버 또는 추적할 활동에 정의된 IEnumerable 인터페이스를 구현하는 활동 속성 또는 필드의 단일 요소(또는 멤버)를 지정합니다. Value 속성은 지정된 Operator를 사용하여 Member 속성과 비교할 값을 나타냅니다. ActivityTrackingCondition 클래스에서 ActivityTrackingLocation과 함께 이러한 세 속성을 사용하여 Name 속성이 "CodeActivity1"인 CodeActivity 활동만 추적하도록 지정할 수 있습니다.
UserTrackingLocation
활동 디자이너나 워크플로 디자이너는 오버로드된 System.Workflow.ComponentModel.Activity.TrackData(System.Object) 및 System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) 메서드를 사용하여 데이터를 사용자 이벤트로 런타임 추적 인프라에 내보낼 워크플로를 계측할 수 있습니다. 내보낸 데이터를 사용자 데이터라고 합니다. 활동 상태나 워크플로 상태가 변경될 때만 발생하는 활동 상태 이벤트 및 워크플로 상태 이벤트와 달리 사용자 이벤트는 워크플로에서 계측되는 모든 위치에서 발생할 수 있습니다. UserTrackingLocation은 사용자 데이터의 형식, 이 형식을 내보내야 하는 활동 유형, 이 활동의 인스턴스를 더욱 정확하게 정규화할 수 있는 조건의 컬렉션, 사용자 데이터를 연결해야 하는 선택적 키 이름, 사용자 데이터의 파생 형식을 일치시켜야 하는지 여부 및 지정된 활동 유형에서 파생된 활동에서 내보낸 사용자 데이터를 일치시켜야 하는지 여부를 지정하여 해당 위치에 대한 일치 매개 변수를 정의합니다.
참고
단일 UserTrackingLocation이 워크플로 인스턴스의 잠재적 실행 경로에 있는 여러 개의 실제 위치를 참조할 수 있습니다.
UserTrackingLocation을 System.Workflow.Runtime.Tracking.UserTrackPoint.MatchingLocations 또는 System.Workflow.Runtime.Tracking.UserTrackPoint.ExcludedLocations 속성에 추가하여 TrackingProfile의 UserTrackPoint에 대한 일치 매개 변수를 정의할 수 있습니다.
조건
UserTrackingLocation이 런타임 추적 인프라에서 일치되려면 세 가지 일반 조건이 다음 순서로 충족되어야 합니다.
사용자 이벤트를 내보낸 활동은 ActivityType, ActivityTypeName, Conditions 및 MatchDerivedActivityTypes 속성으로 지정된 활동의 집합과 일치해야 합니다.
사용자 데이터와 연결된 키(있는 경우)는 KeyName 속성과 일치해야 합니다.
사용자 이벤트에서 내보내는 사용자 데이터의 형식은 ArgumentType, ArgumentTypeName 및 MatchDerivedArgumentTypes 속성으로 지정된 사용자 데이터 형식의 집합과 일치해야 합니다.
세 조건을 모두 충족하는 경우에만 런타임 추적 인프라에서 UserTrackingLocation이 일치하는 것으로 간주합니다.
UserTrackingLocation을 구성하려면 ArgumentTypeName 속성이나 ArgumentType 속성을 설정하여 일치시킬 사용자 데이터의 형식을 지정해야 합니다. 또한 ActivityTypeName 속성이나 ActivityType 속성을 설정하여 일치시키기 위해 사용자 데이터를 내보내야 하는 활동의 유형도 지정해야 합니다. ActivityTrackingCondition 개체를 Conditions에 추가하여 사용자 데이터를 내보내야 하는 활동을 더욱 완전하게 정규화할 수도 있습니다. MatchDerivedArgumentTypes 속성을 설정하여 ArgumentTypeName 또는 ArgumentType 속성으로 지정된 사용자 데이터 형식에서 파생된 사용자 데이터를 일치시키도록 지정하고 MatchDerivedActivityTypes 속성을 설정하여 ActivityTypeName 또는 ActivityType 속성으로 지정된 활동 유형에서 파생된 활동에서 내보낸 사용자 데이터를 일치시키도록 지정할 수 있습니다.
KeyName을 설정하여 지정된 키 이름과 연결된 사용자 데이터만 이 UserTrackingLocation에 대해 일치되도록 지정할 수 있습니다. KeyName 속성이 null(Visual Basic의 경우 Nothing) 참조이면 런타임 추적 구조에서 사용자 데이터와 연결된 키를 일치시키려고 하지 않습니다.
추적 프로필 개체 모델 사용
앞에서 설명했듯이 Windows Workflow Foundation API를 사용하여 추적 서비스에서 사용할 TrackingProfile 개체를 만들 수 있습니다. 추적 프로필 개체 모델에서는 이전 단원에서 설명한 클래스의 집합을 사용하여 TrackingProfile 개체를 만듭니다. TrackingProfile 개체에는 워크플로, 활동 및 사용자 추적 지점과 관련된 추적 지점이 포함되어 있습니다. 각 추적 지점에는 일치하는 위치의 집합도 있습니다. 일치하는 위치는 추적할 이벤트와 추적할 활동에 대해 설명합니다. 일치하는 위치뿐만 아니라 제외되는 위치도 정의할 수 있습니다.
추적 프로필에서 사용되는 활동 속성은 활동 개체 모델에 있는 이름으로 매핑되어야 합니다.
경고
추적 서비스는 추적 프로필에서 추적을 위해 설정된 public 속성에 액세스합니다. 이로 인해 워크플로에서 예기치 않은 결과가 발생할 수 있습니다.
예를 들어, 카운터 속성에 액세스할 때마다 증가하는 public 증가 카운터 속성이 있는 워크플로를 만드는 경우 카운터 속성을 추적하는 추적 프로필을 만들면 추적 서비스에서 카운터 속성에 액세스하고 카운터가 증가합니다. 이 시나리오에서는 워크플로의 비즈니스 논리 외부에 있는 추적 서비스에서 속성을 예기치 않게 증가시킵니다.
다음 코드 예제에서는 CodeActivity 활동과 세 이벤트 Initialized, Executing 및 Closed를 추적하는 추적 프로필을 만드는 방법을 보여 줍니다. 프로필에는 일치하는 위치가 하나인 단일 ActivityTrackPoint가 있습니다.
static void CreateSimpleTrackingProfile()
{
TrackingProfile myProfile = new TrackingProfile();
ActivityTrackPoint myTrackPoint = new ActivityTrackPoint();
ActivityTrackingLocation myLocation = new ActivityTrackingLocation(typeof(CodeActivity));
myLocation.MatchDerivedTypes = false;
myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Initialized);
myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Executing);
myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Closed);
myTrackPoint.MatchingLocations.Add(myLocation);
myProfile.ActivityTrackPoints.Add(myTrackPoint);
myProfile.Version = new Version("1.0.0.0");
TrackingProfileSerializer trackingProfileSerializer = new TrackingProfileSerializer();
StringBuilder trackingProfileString = new StringBuilder();
using (StringWriter writer = new StringWriter(trackingProfileString, CultureInfo.InvariantCulture))
{
trackingProfileSerializer.Serialize(writer, myProfile);
Console.WriteLine(writer.ToString());
}
}
TrackingProfile에 대한 XML 만들기 및 사용
XML을 사용하여 추적 프로필을 작성할 수도 있습니다. 이렇게 하는 경우 XML을 TrackingProfile로 deserialize해야 합니다. 이전 단계에서 만든 TrackingProfile에 해당하는 XML 표현은 다음과 같습니다.
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<TrackingProfile xmlns="https://schemas.microsoft.com/winfx/2006/workflow/trackin
gprofile" version="1.0.0.0">
<TrackPoints>
<ActivityTrackPoint>
<MatchingLocations>
<ActivityTrackingLocation>
<Activity>
<Type>System.Workflow.Activities.CodeActivity, System.Wo
rkflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad36
4e35</Type>
<MatchDerivedTypes>false</MatchDerivedTypes>
</Activity>
<ExecutionStatusEvents>
<ExecutionStatus>Initialized</ExecutionStatus>
<ExecutionStatus>Executing</ExecutionStatus>
<ExecutionStatus>Closed</ExecutionStatus>
</ExecutionStatusEvents>
</ActivityTrackingLocation>
</MatchingLocations>
</ActivityTrackPoint>
</TrackPoints>
</TrackingProfile>
TrackingProfile의 XML 표현은 추적 프로필 개체 모델과 Windows Workflow Foundation에 포함된 TrackingProfileSerializer 클래스를 사용하여 생성할 수도 있습니다.
다음 예제에서는 TrackingProfile 개체를 XML 데이터로 serialize하는 방법을 보여 줍니다.
TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder(),CultureInfo.InvariantCulture);
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();
참고 항목
참조
개념
Copyright © 2007 by Microsoft Corporation. All rights reserved.