다음을 통해 공유


워크플로에서 상관 관계 사용

Windows Workflow Foundation 런타임 엔진은 상관 관계를 사용하여 인바운드 메시지를 워크플로 인스턴스의 특정 HandleExternalEventActivity 활동에 매핑합니다. 인스턴스에 대한 매핑은 워크플로 인스턴스 InstanceIdExternalDataEventArgs 생성자에 전달될 때 수행됩니다.

인터페이스 특성을 사용하여 상관 관계를 정의할 수 있습니다. Windows Workflow Foundation 워크플로 통신 서비스 인터페이스는 상관 관계에 대한 추가 메타데이터를 지정할 수 있습니다. 이 상관 관계 데이터는 워크플로 인스턴스에 대한 이벤트 활동을 상호 연결하는 데 필요합니다. 상관 관계 메타데이터 지정은 인터페이스에 대한 특성(CorrelationParameterAttribute 특성)의 형태를 취합니다.

참고

통신 인터페이스에 상관 관계 특성을 제공하는 것은 선택 사항입니다. 기본적으로 통신 인터페이스는 상호 연결되어 있지 않습니다. 사용자는 특정 활동 인스턴스에 메시지를 배달하기 위해 상관 관계가 필요한 경우에만 상관 관계 특성을 추가해야 합니다.

인터페이스 특성

다음 표에서는 Windows Workflow Foundation 워크플로 통신 서비스에서 사용할 수 있고 인터페이스 정의에서 사용할 수 있는 인터페이스 특성의 전체 집합에 대해 설명합니다.

특성 설명

CorrelationParameterAttribute

상관 관계에 사용되고 인터페이스에 정의된 메서드와 이벤트에서 사용되는 매개 변수의 이름을 지정하는 데 사용됩니다. 메서드나 이벤트에 이름과 일치하는 형식 매개 변수가 포함되어 있으면 이 매개 변수는 해당 메서드나 이벤트에 대한 상관 관계 값을 정의합니다. 이러한 매개 변수가 포함되어 있지 않은 경우에는 메서드나 이벤트에서 CorrelationAliasAttribute를 사용하여 상관 관계 값의 위치를 정의할 수 있습니다. 이 특성은 인터페이스에서 두 번 이상 나타날 수 있습니다.

CorrelationInitializerAttribute

메서드가 호출되거나 이벤트가 발생할 때 상관 관계 매개 변수의 값이 초기화되도록 지정하기 위해 해당 메서드나 이벤트에 사용됩니다. 지정된 CorrelationToken에 대해 대화에서 다른 메서드나 이벤트가 실행되기 전에 이니셜라이저 메서드나 이벤트가 호출되거나 수신되어야 합니다. 새 대화, 즉 새 상관 관계 토큰을 초기화할 수 있는 모든 메서드나 이벤트가 이 특성으로 표시되어야 합니다. 메서드나 이벤트에는 각 상관 관계 토큰에 대해 적절하게 명명된 매개 변수나 CorrelationAliasAttribute가 포함되어야 합니다.

CorrelationAliasAttribute

해당 멤버에 대한 CorrelationParameter 설정을 재정의하기 위해 메서드 또는 이벤트 정의에 사용됩니다. CorrelationAliasAttribute 특성은 상관 관계 값을 가져올 사용 가능한 매개 변수의 위치를 지정합니다. 문자열 매개 변수는 형식 매개 변수 집합에 대한 점으로 구분된 경로이며 일치하는 데이터 값을 찾을 수 있는 위치를 지정합니다. 상관 관계 토큰이 두 개 이상 정의되어 있으면 토큰의 명명된 매개 변수 Name도 지정되어야 합니다.

상관 관계 특성 사용

CorrelationParameterAttribute는 대화 식별자인 상관 관계를 명명합니다. 인터페이스의 각 메서드나 이벤트는 다음 ITaskService 인터페이스 코드 예제와 같이 해당 이름의 형식 매개 변수(예: id)를 사용하여 선언됩니다. 더욱 복잡한 상관 관계 매핑을 설명하기 위해 다른 특성을 사용할 수도 있습니다. 대화에 대한 인스턴스와 상관 관계 정보가 알려진 후 클래스는 로컬 서비스 이벤트를 발생시키고 호출 시 매개 변수 데이터에 상관 관계를 지정합니다.

다음 코드 예제에서는 워크플로 통신 서비스의 상호 연결된 인터페이스 정의 ITaskService를 보여 줍니다.

    [Serializable]
    public class TaskEventArgs : ExternalDataEventArgs
    {
        private string id;

        public TaskEventArgs(Guid instanceId,string id)
            :base(instanceId)
        {
            this.id = id;
        }

        public string Id
        {
            get { return id; }
            set { id = value; }
        }
    }

    [ExternalDataExchange]
    [CorrelationParameter("taskId")]
    public interface ITaskService
    {
        [CorrelationInitializer]
        void CreateTask(string taskId, string assignee, string text);

        [CorrelationAlias("taskId", "e.Id")]
        event EventHandler<TaskEventArgs> TaskCompleted;
    }

새 대화를 시작하는 모든 작업, 메서드 또는 이벤트에는 CorrelationInitializerAttribute 특성이 지정되어야 합니다. CorrelationInitializerAttribute 메서드 m을 호출하면 새 대화가 해당 호출로 초기화되고 있음을 서비스 클래스에서 인식합니다. 워크플로 대화 수명은 상관 관계 참조의 수명으로 결정됩니다. 워크플로는 대화 간에 언로드되고 로드될 수 있습니다.

다음 코드 예제에서는 ITaskService를 구현하는 서비스 클래스를 보여 줍니다.

    public class TaskService : ITaskService
    {
        public void CreateTask(string taskId, string assignee, string text)
        {
            Console.WriteLine("task " + taskId + " created for " + assignee);
        }

        public void RaiseEvent(TaskEventArgs args)
        {
            if (TaskCompleted != null)
                TaskCompleted(null, args);
        }

        public event EventHandler<TaskEventArgs> TaskCompleted;
    }

참고 항목

참조

CorrelationParameterAttribute
CorrelationInitializerAttribute
CorrelationParameterAttribute
ExternalDataEventArgs
HandleExternalEventActivity

개념

워크플로에서 로컬 서비스 사용
로컬 통신 및 상관 관계 개요
워크플로 및 응용 프로그램 통신

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.