다음을 통해 공유


작업 5: 추적 프로필 만들기

추적 프로필은 Windows Workflow Foundation 런타임 엔진에서 생성하는 추적 정보의 유형을 제어하는 데 사용됩니다. 기본적으로 기본 프로필을 사용하면 모든 워크플로 및 활동 이벤트에 대한 추적 정보가 저장됩니다.

이 작업에서는 CodeActivity 활동에 대한 모든 워크플로 이벤트와 활동 이벤트를 추적하는 사용자 지정 추적 프로필을 만듭니다. 워크플로의 다른 모든 활동은 이 프로필이 사용될 때 추적 정보를 생성하지 않습니다.

참고

이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.

네임스페이스를 가져오려면

  • Program 소스 파일에서 다음 지시문을 추가하여 추적 프로필에 필요한 형식을 가져옵니다.

    using System.IO;
    using System.Globalization;
    using System.Workflow.ComponentModel;
    using System.Workflow.Activities;
    

추적 프로필을 만들려면

  1. 프로젝트의 Program 클래스에서 CreateTrackingProfile이라는 정적 메서드를 만듭니다.

    Private Shared Sub CreateTrackingProfile()
    End Sub
    
    static void CreateTrackingProfile()
    {
    }
    
  2. 1단계에서 만든 CreateTrackingProfile 메서드에서 profile이라는 TrackingProfile 개체와 trackPoint라는 ActivityTrackPoint 개체를 만듭니다. 또한 TrackingProfile 개체의 Version 속성을 Version 개체의 새 인스턴스로 설정하고 문자열 "1.0.0.0"을 생성자에 매개 변수로 전달합니다.

    TrackingProfile profile = new TrackingProfile();
    ActivityTrackPoint trackPoint = new ActivityTrackPoint();
    profile.Version = new Version("1.0.0.0");
    
  3. location이라는 ActivityTrackingLocation 개체를 만들고 CodeActivity 활동의 Type을 생성자에 매개 변수로 전달합니다.

    // track CodeActivity activities only
    ActivityTrackingLocation location = new ActivityTrackingLocation
        (typeof(CodeActivity));
    
  4. ActivityExecutionStatus 열거형 데이터 형식의 값을 열거하고 ActivityTrackingLocation 개체에 정의된 ExecutionStatusEvents 컬렉션에 추가합니다.

    // add all activity tracking events
    foreach (ActivityExecutionStatus s in
        Enum.GetValues(typeof(ActivityExecutionStatus)))
    {
        location.ExecutionStatusEvents.Add(s);
    }
    
  5. ActivityTrackingLocation 개체를 ActivityTrackPoint 개체에 정의된 MatchingLocations 컬렉션에 추가합니다.

  6. ActivityTrackPoint 개체를 TrackingProfile 개체에 정의된 ActivityTrackPoints 컬렉션에 추가합니다.

    trackPoint.MatchingLocations.Add(location);
    profile.ActivityTrackPoints.Add(trackPoint);
    
  7. wtp라는 새 WorkflowTrackPoint 개체와 wtl이라는 WorkflowTrackingLocation 개체를 만듭니다.

    WorkflowTrackPoint wtp = new WorkflowTrackPoint();
    WorkflowTrackingLocation wtl = new WorkflowTrackingLocation();
    
  8. TrackingWorkflowEvent 열거형 데이터 형식을 열거하고 각 값을 WorkflowTrackingLocation 개체에 정의된 Events 컬렉션에 추가합니다.

    // add all workflow tracking events
    foreach (TrackingWorkflowEvent s in
        Enum.GetValues(typeof(TrackingWorkflowEvent)))
    {
        wtl.Events.Add(s);
    }
    
  9. WorkflowTrackPoint 개체에 정의된 MatchingLocation 속성을 WorkflowTrackingLocation 개체로 설정합니다.

  10. WorkflowTrackPoint 개체를 TrackingProfile 개체에 정의된 WorkflowTrackPoints 컬렉션에 추가합니다.

    wtp.MatchingLocation = wtl;
    profile.WorkflowTrackPoints.Add(wtp);
    
  11. serializer라는 새 TrackingProfileSerializer 개체와 writer라는 StringWriter 개체를 만듭니다.

    // serialize tracking profile and save to SQL
    TrackingProfileSerializer serializer = new TrackingProfileSerializer();
    StringWriter writer = new StringWriter(new StringBuilder(),
        CultureInfo.InvariantCulture);
    
  12. TrackingProfileSerializer 클래스에 정의된 Serialize 메서드를 호출하여 TrackingProfile 개체를 serialize합니다.

    StringWriterTrackingProfile 개체를 해당 메서드에 매개 변수로 전달합니다.

    serializer.Serialize(writer, profile);
    
  13. InsertTrackingProfile 메서드를 호출하여 **writer.ToString()**을 해당 메서드에 매개 변수로 전달합니다.

    참고

    다음 절차에서 InsertTrackingProfile 메서드를 만듭니다.

    InsertTrackingProfile(writer.ToString());
    
  14. Program 클래스의 Main 메서드에서 방금 만든 CreateTrackingProfile 메서드를 호출합니다. WorkflowRuntime 개체를 만들기 전에 이 메서드를 호출해야 합니다.

    CreateTrackingProfile();
    

SQL 데이터베이스에 추적 프로필을 저장하려면

  1. 프로젝트의 Program 클래스에서 profile이라는 String을 매개 변수로 사용하는 InsertTrackingProfile이라는 새 정적 메서드를 만듭니다.

    Private Shared Sub InsertTrackingProfile(ByVal profile As String)
    End Sub
    
    static void InsertTrackingProfile(string profile)
    {
    }
    
  2. InsertTrackingProfile 메서드에서 cmd라는 새 SqlCommand 개체를 만듭니다.

    SqlCommand cmd = new SqlCommand();
    
  3. 이전 단계에서 만든 SqlCommand 개체를 사용하여 CommandType 속성을 CommandType.StoredProcedure로 설정하고 CommandText 속성을 "dbo.UpdateTrackingProfile"로 설정합니다.

  4. SqlConnection 개체를 만들고 Program.connectionString을 생성자에 매개 변수로 전달한 다음 이 개체를 SqlCommand 개체에 정의된 Connection 속성에 할당합니다.

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "dbo.UpdateTrackingProfile";
    cmd.Connection = new SqlConnection(Program.connectionString);
    
  5. try 블록을 만들고 이 블록에 6-15단계의 코드를 삽입합니다.

  6. typFullName이라는 새 SqlParameter 개체를 만들고 다음 표와 같이 속성을 설정합니다.

    속성 이름 속성 값

    ParameterName

    "@TypeFullName"

    SqlDbType

    SqlDbType.NVarChar

    SqlValue

    typeof(Microsoft.Samples.Workflow.Tutorials.Hosting.HostingWorkflows).ToString();

  7. SqlParameter 개체를 SqlCommand 개체에 정의된 Parameters 컬렉션에 추가합니다.

    typFullName 개체에 대한 코드는 다음 코드와 유사합니다.

    SqlParameter typFullName = new SqlParameter();
    typFullName.ParameterName = "@TypeFullName";
    typFullName.SqlDbType = SqlDbType.NVarChar;
    typFullName.SqlValue = typeof(HostingWorkflows).ToString();
    cmd.Parameters.Add(typFullName);
    
  8. assemblyFullName이라는 새 SqlParameter 개체를 만들고 다음 표와 같이 속성을 설정합니다.

    속성 이름 속성 값

    ParameterName

    "@AssemblyFullName"

    SqlDbType

    SqlDbType.NVarChar

    SqlValue

    typeof(Microsoft.Samples.Workflow.Tutorials.Hosting.HostingWorkflows).Assembly.FullName

  9. SqlParameter 개체를 SqlCommand 개체에 정의된 Parameters 컬렉션에 추가합니다.

    assemblyFullName 개체에 대한 코드는 다음 코드와 유사합니다.

    SqlParameter assemblyFullName = new SqlParameter();
    assemblyFullName.ParameterName = "@AssemblyFullName";
    assemblyFullName.SqlDbType = SqlDbType.NVarChar;
    assemblyFullName.SqlValue = typeof(HostingWorkflows).Assembly.FullName;
    cmd.Parameters.Add(assemblyFullName);
    
  10. versionId라는 새 SqlParameter 개체를 만들고 다음 표와 같이 속성을 설정합니다.

    속성 이름 속성 값

    ParameterName

    "@Version"

    SqlDbType

    SqlDbType.VarChar

    SqlValue

    "1.0.0.0"

  11. SqlParameter 개체를 SqlCommand 개체에 정의된 Parameters 컬렉션에 추가합니다.

    versionId 개체에 대한 코드는 다음 코드와 유사합니다.

    SqlParameter versionId = new SqlParameter();
    versionId.ParameterName = "@Version";
    versionId.SqlDbType = SqlDbType.VarChar;
    versionId.SqlValue = "1.0.0.0";
    cmd.Parameters.Add(versionId);
    
  12. trackingProfile이라는 새 SqlParameter 개체를 만들고 다음 표와 같이 속성을 설정합니다.

    속성 이름 속성 값

    ParameterName

    "@TrackingProfileXml"

    SqlDbType

    SqlDbType.NVarChar

    SqlValue

    profile

  13. SqlParameterSqlCommand 개체에 정의된 Parameters 컬렉션에 추가합니다.

    trackingProfile 개체에 대한 코드는 다음 코드와 유사합니다.

    SqlParameter trackingProfile = new SqlParameter();
    trackingProfile.ParameterName = "@TrackingProfileXml";
    trackingProfile.SqlDbType = SqlDbType.NVarChar;
    trackingProfile.SqlValue = profile;
    cmd.Parameters.Add(trackingProfile);
    
  14. SqlCommand 개체의 Connection 속성에 정의된 Open 메서드를 호출합니다.

  15. SqlCommand 개체에 정의된 ExecuteNonQuery 메서드를 호출하여 저장 프로시저를 실행하고 추적 프로필을 저장합니다.

    cmd.Connection.Open();
    cmd.ExecuteNonQuery();
    
  16. 5-15단계에서 만든 try 블록 뒤에 SqlException 예외에 대한 새 catch 블록을 만듭니다.

  17. catch 블록에서 WriteLine 메서드를 사용하여 SqlException 개체에 정의된 Message 속성을 표시합니다.

    또한 추적 프로필이 변경될 때마다 추적 프로필을 새 버전 번호로 업데이트하는 데 필요한 단계에 대해 설명하는 메시지를 추가합니다.

    catch (SqlException e)
    {
        Console.WriteLine(e.Message);
        Console.WriteLine("The Tracking Profile was not inserted. " +
            "if you want to add a new Tracking Profile, modify the version " +
            "string in the profile by specifying a higher version number.");
        return;
    }
    
  18. finally 블록을 만들고 Close 메서드를 호출한 다음 SqlCommand 개체의 Connection 속성에 정의된 Dispose 메서드를 호출합니다.

    finally
    {
        if ((null != cmd) && (null != cmd.Connection) &&
            (ConnectionState.Closed != cmd.Connection.State))
        {
            cmd.Connection.Close();
            cmd.Connection.Dispose();
        }
    }
    
  19. 프로젝트를 빌드하고 실행합니다.

    출력은 다음 그림과 유사합니다.

    작업 5 완료 후 출력

코드 컴파일

코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.

총괄 자습서를 보려면 Windows Workflow Foundation 런타임 호스팅 총괄 자습서를 참조하십시오.

참고 항목

참조

System.Workflow.Runtime.Tracking
TrackingProfile
ActivityTrackPoint
ActivityExecutionStatus
ActivityTrackingLocation
WorkflowTrackPoint
WorkflowTrackingLocation
TrackingProfileSerializer

개념

사용자 지정 추적 서비스 만들기
추적 프로필 만들기 및 사용

기타 리소스

Simple Tracking Example
Query Using SQLTrackingService
Tracking Using User Track Points
EventArgs Tracking Sample
ConsoleTrackingService Sample

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.