다음을 통해 공유


워크플로 서비스 호스트 내부 동작

WorkflowServiceHost 는 워크플로 서비스에 대한 호스트를 제공합니다. 들어오는 메시지를 수신 대기하고 적절한 워크플로 서비스 인스턴스로 라우팅하고 유휴 워크플로의 언로드 및 유지를 제어하는 작업을 담당합니다. 이 항목에서는 WorkflowServiceHost가 들어오는 메시지를 처리하는 방법을 설명합니다.

WorkflowServiceHost 개요

클래스 WorkflowServiceHost 는 워크플로 서비스를 호스트하는 데 사용됩니다. 들어오는 메시지를 수신 대기하고 적절한 서비스 인스턴스로 라우팅하여 새 인스턴스를 만들거나 필요에 따라 지속성 스토리지에서 기존 인스턴스를 로드합니다. 다음 다이어그램은 WorkflowServiceHost의 작동 방식을 높은 수준에서 개략적으로 보여 줍니다.

워크플로 서비스 호스트의 개요를 보여 주는 다이어그램

이 다이어그램은 WorkflowServiceHost .xamlx 파일에서 워크플로 서비스 정의를 로드하고, 구성 파일에서 구성 정보를 로드하는 것을 보여 줍니다. 또한 추적 프로필에서 추적 구성을 로드합니다. WorkflowServiceHost 는 워크플로 인스턴스에 제어 작업을 보낼 수 있는 워크플로 제어 엔드포인트를 노출합니다. 자세한 내용은 워크플로 제어 엔드포인트 샘플을 참조하세요.

WorkflowServiceHost 또한 들어오는 애플리케이션 메시지를 수신 대기하는 애플리케이션 엔드포인트를 노출합니다. 들어오는 메시지가 도착하면 적절한 워크플로 서비스 인스턴스로 전송됩니다(현재 로드된 경우). 필요한 경우 새 워크플로 인스턴스가 만들어집니다. 또는 기존 인스턴스가 유지된 경우 지속성 저장소에서 로드됩니다.

WorkflowServiceHost 세부 정보

다음 다이어그램에서는 메시지를 좀 더 자세히 처리하는 방법을 WorkflowServiceHost 보여 줍니다.

워크플로 서비스 호스트 메시지 흐름을 보여 주는 다이어그램

이 다이어그램은 세 가지 엔드포인트, 애플리케이션 엔드포인트, 워크플로 제어 엔드포인트 및 엔드포인트를 호스팅하는 워크플로를 보여 줍니다. 애플리케이션 엔드포인트는 특정 워크플로 인스턴스에 바인딩된 메시지를 받습니다. 워크플로 컨트롤 엔드포인트는 제어 작업을 수신 대기합니다. 엔드포인트를 호스팅하는 워크플로는 비서비스 워크플로를 로드하고 실행하게 하는 WorkflowServiceHost 메시지를 수신 대기합니다. 다이어그램에 표시된 것처럼 모든 메시지는 WCF 런타임을 통해 처리됩니다. 워크플로 서비스 인스턴스 제한은 속성을 사용하여 수행됩니다 MaxConcurrentInstances . 이 속성은 동시 워크플로 서비스 인스턴스 수를 제한합니다. 이 제한이 초과되면 새 워크플로 서비스 인스턴스에 대한 추가 요청 또는 지속형 워크플로 인스턴스를 활성화하기 위한 요청이 큐에 대기됩니다. 큐에 대기된 요청은 새 인스턴스에 대한 요청이든 실행 중인 지속형 인스턴스에 대한 요청이든 관계없이 FIFO 순서로 처리됩니다. 처리되지 않은 예외 처리 방법 및 유휴 워크플로 서비스가 언로드되고 지속되는 방식을 결정하는 호스트 정책 정보가 로드됩니다. 이러한 항목에 대한 자세한 내용은 방법: WorkflowServiceHost를 사용하여 워크플로 처리되지 않은 예외 동작 구성방법: WorkflowServiceHost를 사용하여 유휴 동작 구성을 참조하세요. 워크플로 인스턴스는 호스트 정책에 따라 유지되며 필요할 때 다시 로드됩니다. 워크플로 지속성에 대한 자세한 내용은 다음을 참조하세요. 방법: WorkflowServiceHost를 사용하여 지속성 구성, 장기 실행 워크플로 서비스 만들기 및 워크플로 지속성.

다음 그림에서는 WorkflowServiceHost.Open이 호출되는 흐름을 보여 줍니다.

WorkflowServiceHost.Open이 호출되는 흐름을 보여 주는 다이어그램

워크플로가 XAML에서 로드되고 활동 트리가 만들어집니다. WorkflowServiceHost 는 활동 트리를 탐색하고 서비스 설명을 만듭니다. 구성이 호스트에 적용됩니다. 마지막으로 호스트가 들어오는 메시지를 수신 대기하기 시작합니다.

다음 그림은 CanCreateInstanceWorkflowServiceHost가 설정된 수신 작업에 바인딩된 메시지를 수신할 때 true가 수행하는 작업을 보여줍니다.

WFS 호스트가 메시지를 수신하고 CanCreateInstance가 true일 때 사용하는 의사 결정 트리입니다.

메시지가 도착하여 WCF 채널 스택에서 처리됩니다. 스로틀이 점검되고 상관 관계 쿼리가 실행됩니다. 메시지가 기존 인스턴스에 바인딩된 경우 메시지가 배달됩니다. 새 인스턴스를 만들어야 하는 경우 Receive 작업의 CanCreateInstance 속성이 선택됩니다. true로 설정하면 새 인스턴스가 만들어지고 메시지가 배달됩니다.

다음 그림은 CanCreateInstance가 false로 설정된 수신 활동으로 연결된 메시지를 받을 때 WorkflowServiceHost가 수행하는 작업을 보여 줍니다.

WFS 호스트가 메시지를 수신하고 CanCreateInstance가 false일 때 사용하는 의사 결정 트리입니다.

메시지가 도착하여 WCF 채널 스택에서 처리됩니다. 스로틀이 점검되고 상관 관계 쿼리가 실행됩니다. 메시지는 기존 인스턴스(CanCreateInstance가 false이므로)에 바인딩되어 있으므로 인스턴스가 지속성 저장소에서 로드되고 책갈피가 다시 시작되고 워크플로가 실행됩니다.

경고

SQL Server가 NamedPipe 프로토콜에서만 수신하도록 구성된 경우 워크플로 서비스 호스트가 열리지 않습니다.

참고하십시오