다음을 통해 공유


워크플로에서 로컬 서비스 사용

Windows Workflow Foundation은 워크플로의 호스팅 환경과 웹 서비스를 사용한 워크플로 간의 통신에서 로컬 통신 서비스를 지원합니다. 웹 서비스를 사용한 워크플로 통신에 대한 자세한 내용은 다른 워크플로와 통신을 참조하십시오.

Windows Workflow Foundation 워크플로 통신 서비스는 사용자 정의 서비스 클래스를 워크플로 제작자에게 메서드 호출과 이벤트 처리기로 노출하여 아웃바운드 및 인바운드 메시지 교환의 모델링을 간단하게 만듭니다. 단일 서비스 클래스 인스턴스를 여러 워크플로 인스턴스로 멀티플렉싱하면 호스트 작성자가 이벤트를 발생시킬 때 특정 워크플로 인스턴스를 대상으로 하면서 아웃바운드 메시지에 대한 단일 위치에 대해 프로그래밍할 수 있습니다.

다음 다이어그램에서는 로컬 통신 서비스가 호스트 응용 프로그램과 통신하는 방법을 보여 줍니다.

로컬 호스트 통신

워크플로 인스턴스에 대한 HandleExternalEventActivityCallExternalMethodActivity 활동은 사용자 지정 인터페이스에서 선언되고 사용자 지정 로컬 서비스에서 구현되는 이벤트 및 메서드와 상호 작용합니다. HandleExternalEventActivity 활동은 호스트 응용 프로그램에서 발생하고 로컬 서비스에서 구현되는 특정 이벤트에 응답합니다. CallExternalMethodActivity는 로컬 서비스에 대해 메서드를 호출합니다. HandleExternalEventActivityCallExternalMethodActivity를 사용하는 방법에 대한 자세한 내용은 HandleExternalEventActivity 활동 사용CallExternalMethodActivity 활동 사용을 참조하십시오.

워크플로 통신 서비스

Windows Workflow Foundation 워크플로 통신 서비스는 개체가 워크플로 인스턴스와 통신할 수 있도록 하는 간단한 메커니즘을 구현합니다. 통신 채널의 정의는 인터페이스이며 그 구현은 통신을 원활하게 하기 위해 런타임에 추가되는 서비스 클래스입니다.

서비스 클래스 측면에서 워크플로는 다른 클래스와 유사하게 동작하며 이벤트를 발생시키고 메서드 호출을 받아 워크플로와 통신합니다. 워크플로 측면에서 통신 인터페이스는 인바운드 이벤트 싱크와 아웃바운드 작업 메서드 호출이 포함된 채널로 나타납니다.

인터페이스의 외부 메서드 선언은 ExternalDataExchangeService에 의해 서비스 개체에 대한 메서드 호출로 변환됩니다. 로컬 서비스로 참조할 수 있는 클래스는 워크플로 런타임 엔진에서 가로채는 이벤트를 발생시킵니다. 이 이벤트는 워크플로에 대한 인바운드 메시지로 배달됩니다.

다음 코드 예제에서는 로컬 워크플로 통신 인터페이스를 정의하는 방법의 예를 보여 줍니다.

[ExternalDataExchange]
public interface ICommunicationService
{
    void HelloHost(string message);
    event EventHandler<ExternalDataEventArgs> HelloWorkflow;
}

서비스 클래스

서비스 클래스는 워크플로와의 통신을 정의하는 데 사용되는 인터페이스를 구현합니다. 인터페이스의 모든 이벤트는 단방향이므로 ref 또는 out 매개 변수와 반환 값이 없습니다. 그러나 보내는 요청의 경우 인터페이스의 메서드에는 refout 매개 변수와 반환 값이 있을 수 있습니다.

통신 모델은 다대일입니다. 즉, 각각 많은 대화를 수행할 수 있는 많은 워크플로 인스턴스가 해당 singleton 서비스 개체와 통신합니다. 이것은 모든 워크플로에서 특정 메서드 m에 대한 모든 아웃바운드 호출이 동일한 개체에서 동일한 m으로 처리됨을 의미합니다.

이와 반대로 모든 인바운드 호출의 대상은 올바른 워크플로 인스턴스와 대화로 명시적으로 지정되어야 합니다. Windows Workflow Foundation에서는 아웃바운드 호출의 워크플로 인스턴스와 대화를 구별하는 메커니즘과 함께 m을 제공합니다. 개체는 이러한 두 가지 정보를 사용하여 올바른 워크플로 인스턴스의 올바른 대화로 응답을 보낼 수 있습니다.

Windows Workflow Foundation에서는 아웃바운드 호출 스레드에 대한 호출 워크플로의 인스턴스 식별자를 System.Workflow.Runtime.WorkflowEnvironment.WorkflowInstanceId에 제공합니다.

다음 코드 예제에서는 통신 서비스 구현을 보여 줍니다.

public class CommunicationService : ICommunicationService 
{
    public event EventHandler<ExternalDataEventArgs> HelloWorkflow;

    public void HelloHost(string message)
    {
        Console.WriteLine("This is the message: {0}", message);

        // Raise the HelloWorkflow event.
        HelloWorkflow(null, new ExternalDataEventArgs(WorkflowEnvironment.WorkflowInstanceId));
    }
}

워크플로의 인스턴스를 시작하기 전에 다음 코드 예제와 같이 ExternalDataExchangeService를 워크플로 런타임 엔진에 추가한 다음 사용자 지정 통신 서비스를 ExternalDataExchangeService에 추가해야 합니다.

ExternalDataExchangeService externalService = new ExternalDataExchangeService();
workflowRuntime.AddService(externalService);
externalService.AddService(new CommunicationService());

호스트와 로컬 서비스의 통신 예를 보려면 HostCommunication Sample을 참조하십시오.

참고 항목

참조

HandleExternalEventActivity
CallExternalMethodActivity

개념

HandleExternalEventActivity 활동 사용
CallExternalMethodActivity 활동 사용
다른 워크플로와 통신
워크플로 및 응용 프로그램 통신

기타 리소스

HostCommunication Sample

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.