다음을 통해 공유


워크플로 서비스 개요

워크플로 서비스는 워크플로를 사용하여 구현되는 WCF 기반 서비스입니다. 워크플로 서비스는 메시징 활동을 사용하여 WCF(Windows Communication Foundation) 메시지를 보내고 받는 워크플로입니다. .NET Framework 4.5에는 워크플로 내에서 메시지를 보내고 받을 수 있는 다양한 메시징 활동이 도입되었습니다. 메시징 활동 및 메시징 활동을 사용하여 다양한 메시지 교환 패턴을 구현하는 방법에 대한 자세한 내용은 메시징 활동을 참조하세요.

워크플로 서비스 사용의 이점

애플리케이션이 점점 더 분산됨에 따라 개별 서비스는 다른 서비스를 호출하여 일부 작업을 오프로드할 책임이 있습니다. 이러한 호출을 비동기 작업으로 구현하면 코드가 약간 복잡합니다. 오류 처리는 예외를 처리하고 자세한 추적 정보를 제공하는 형태로 복잡성을 더합니다. 일부 서비스는 종종 장기 실행되며 입력을 기다리는 동안 중요한 시스템 리소스를 차지할 수 있습니다. 이러한 문제로 인해 분산 애플리케이션은 매우 복잡하고 쓰기 및 유지 관리가 어려운 경우가 많습니다. 워크플로는 비동기 작업, 특히 외부 서비스에 대한 호출의 조정을 표현하는 자연스러운 방법입니다. 워크플로는 장기 실행 비즈니스 프로세스를 나타내는 데에도 효과적입니다. 이러한 품질은 워크플로를 분산된 환경에서 서비스를 빌드하는 데 유용한 자산입니다.

워크플로 서비스 구현

WCF 서비스를 구현할 때 서비스 및 서비스를 보내고 받는 데이터를 설명하는 여러 계약을 정의합니다. 데이터는 데이터 계약 및 메시지 계약으로 표시됩니다. WCF 및 워크플로 서비스 모두 서비스 설명의 일부로 데이터 계약 및 메시지 계약 정의를 사용합니다. 서비스 자체는 서비스의 작업을 설명하는 메타데이터(WSDL 형식)를 노출합니다. WCF에서 서비스 계약 및 작업 계약은 지원하는 서비스 및 작업을 정의합니다. 그러나 워크플로 서비스에서 이러한 계약은 비즈니스 프로세스 자체의 일부입니다. 계약 유추라는 프로세스에 의해 메타데이터에 노출됩니다. 워크플로 서비스를 사용하여 WorkflowServiceHost호스팅하는 경우 워크플로 정의가 검사되고 워크플로에서 찾은 메시징 활동 집합에 따라 계약이 생성됩니다. 특히 다음 활동 및 속성은 계약을 생성하는 데 사용됩니다.

Receive 활동

SendReply 활동

TransactedReceiveScope 활동

계약 유추의 최종 결과는 WCF 서비스 및 작업 계약과 동일한 데이터 구조를 사용하는 서비스에 대한 설명입니다. 그런 다음 이 정보를 사용하여 워크플로 서비스에 대한 WSDL을 노출합니다.

비고

.NET Framework 4.6.1에서는 추가 도구 지원 없이 기존 계약 정의를 사용하여 워크플로 서비스를 작성할 수 없습니다. 워크플로 서비스 계약은 앞에서 설명한 계약 유추 프로세스에 의해 만들어집니다. 그러나 메시지 계약 및 데이터 계약은 완전히 지원됩니다.

워크플로 서비스 및 MSMQ 기반 바인딩

WCF는 두 개의 MSMQ 기반 바인딩 NetMsmqBindingMsmqIntegrationBinding을 정의합니다. MSMQ 기반 바인딩은 이러한 서비스의 장기 실행 특성 때문에 워크플로 서비스와 함께 사용되는 경우가 많습니다. MSMQ 기반 바인딩에는 ValidityDuration MSMQ 메시지가 유효하다고 가정할 수 있는 기간을 지정하는 속성이 있습니다. 워크플로 서비스의 장기 실행 특성으로 인해 워크플로 서비스에서 처리하기 전에 MSMQ 메시지의 유효 기간이 경과할 수 있습니다. 따라서 MSMQ 바인딩의 유효 기간을 적절한 값으로 설정하는 것이 매우 중요합니다. 이 값은 워크플로 및 메시지를 처리하는 방법에 따라 선택해야 합니다. 예를 들어, Receive 활동이 있는 워크플로에서 10분이 소요되는 사용자 지정 작업이 이어지고, 그 후에 다른 Receive 활동이 있다면, ValidityDuration 값은 10분보다 커야 합니다.

워크플로 서비스 호스팅

WCF 서비스와 마찬가지로 워크플로 서비스를 호스트해야 합니다. WCF 서비스는 클래스를 ServiceHost 사용하여 서비스를 호스트하고 워크플로 서비스는 서비스를 호스트하는 데 사용합니다 WorkflowServiceHost . WCF 서비스와 마찬가지로 워크플로 서비스는 다음과 같은 다양한 방법으로 호스트될 수 있습니다.

  • 관리되는 .NET Framework 애플리케이션에서.

  • IIS(인터넷 정보 서비스)에서

  • WAS(Windows Process Activation Service)에서

  • 관리되는 Windows 서비스에서.

관리되는 .NET Framework 애플리케이션 또는 관리되는 Windows 서비스에서 호스트되는 워크플로 서비스는 클래스의 WorkflowServiceHost 인스턴스를 만들고 속성 내의 WorkflowService 워크플로 정의가 포함된 인스턴스를 Body 전달합니다. 메시징 활동을 포함하는 워크플로 정의는 워크플로 서비스로 노출됩니다.

IIS 또는 WAS에서 워크플로 서비스를 호스트하려면 워크플로 서비스 정의가 포함된 .xamlx 파일을 가상 디렉터리에 배치합니다. 기본 엔드포인트(사용 BasicHttpBinding)가 자동으로 생성됩니다. 자세한 내용은 간소화된 구성을 참조하세요. 가상 디렉터리에 Web.config 파일을 배치하여 고유한 엔드포인트를 지정할 수도 있습니다. 워크플로 정의가 어셈블리에 있는 경우 가상 디렉터리에 .svc 파일을 배치하고 워크플로 어셈블리를 App_Code 디렉터리에 배치할 수 있습니다. .svc 파일은 서비스 호스트 팩터리와 워크플로 서비스를 구현하는 클래스를 지정해야 합니다. 다음 예제에서는 서비스 호스트 팩터리를 지정하고 워크플로 서비스를 구현하는 클래스를 지정하는 방법을 보여 줍니다.

<%@ServiceHost Factory="System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory"
Service="EchoService"%>