다음을 통해 공유


워크플로 서비스 호스트 확장

이 항목은 Windows Workflow Foundation 4에 적용됩니다.

.NET Framework 버전 4에서는 워크플로 서비스를 호스팅하는 WorkflowServiceHost 클래스를 제공합니다. 이 클래스는 관리되는 응용 프로그램의 워크플로 서비스나 Windows 서비스를 자체 호스팅할 때 사용되며, IIS(인터넷 정보 서비스) 또는 WAS(Windows Process Activation Service)에서 워크플로 서비스를 호스팅할 때도 사용됩니다. WorkflowServiceHost 클래스는 사용자 지정 확장을 추가하고, 유휴 동작을 변경하고, 서비스가 아닌 워크플로(메시징 작업을 사용하지 않는 워크플로)를 호스팅할 수 있는 확장 지점을 제공합니다. 유휴 동작을 변경하는 예제를 보려면 How To: Control Idle Behavior Through Extensibility를 참조하십시오.

워크플로 서비스 호스트 확장

WorkflowServiceHost에는 WorkflowServiceHost에 확장을 추가하는 메서드를 제공하는 WorkflowInstanceExtensionManager 형식의 WorkflowExtensions 속성이 포함되어 있습니다. Add 메서드를 사용하면 각 워크플로 서비스 인스턴스에 대한 확장을 추가할 수 있습니다. 워크플로 서비스 인스턴스를 만들거나 지속성 저장소에서 로드하면 새 확장을 만들기 위해 지정된 대리자가 호출됩니다. Add 메서드를 사용하면 각 워크플로 서비스 호스트에 대한 확장을 추가할 수 있습니다. 모든 워크플로 서비스 인스턴스에서 하나의 확장 인스턴스를 공유합니다.

처리되지 않은 예외에 응답

WorkflowUnhandledExceptionBehavior를 사용하면 워크플로 서비스 내에서 처리되지 않은 예외가 발생할 경우 수행할 동작을 지정할 수 있습니다. Action 속성은 다음 WorkflowUnhandledExceptionAction 값 중 하나를 지정합니다.

  • Abandon – 워크플로 서비스 인스턴스를 중단합니다.

  • AbandonAndSuspend – 마지막으로 지속된 상태로 롤백하고 워크플로 서비스 인스턴스를 일시 중단합니다. 이는 워크플로가 이미 한 번 이상 지속된 경우에만 발생합니다. 그렇지 않은 경우 워크플로 인스턴스가 중단됩니다.

  • Cancel – 인스턴스를 취소합니다.

  • Terminate – 인스턴스를 종료합니다.

이 동작은 다음 예제와 같이 코드에서 구성할 수 있습니다.

host.Description.Behaviors.Add(new WorkflowUnhandledExceptionBehavior { Action = WorkflowUnhandledExceptionAction.Abandon });

또한 다음 예제와 같이 구성 파일에서 이 동작을 구성할 수도 있습니다.

<behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
          <workflowUnhandledExceptionBehavior action="Abandon" />      
        </behavior>
      </serviceBehaviors>

서비스가 아닌 워크플로 호스팅

WorkflowServiceHost를 사용하여 서비스가 아닌 워크플로, Receive 작업으로 시작하지 않는 워크플로 또는 메시징 작업을 사용하지 않는 워크플로를 호스팅할 수 있습니다. 일반적으로 워크플로 서비스는 Receive 작업으로 시작합니다. WorkflowServiceHost가 워크플로 서비스에 대한 메시지를 받을 때 실행 중이거나 지속된 워크플로 서비스가 없으면 새 워크플로 서비스 인스턴스가 만들어집니다. 워크플로가 받기 작업으로 시작하지 않으면 메시지를 받는 작업이 없기 때문에 메시지를 보내도 워크플로가 시작되지 않습니다. 서비스가 아닌 워크플로를 호스팅하려면 WorkflowHostingEndpoint에서 클래스를 파생시키고 OnGetInstanceId, OnGetCreationContextOnResolveBookmark를 재정의합니다. 원하는 인스턴스 ID를 제공하려면 OnGetInstanceId를 재정의합니다. 사용자 지정 워크플로 생성 컨텍스트를 만들거나 기존 WorkflowCreationContext의 인스턴스를 채우려면 OnGetCreationContext를 재정의합니다. 들어오는 메시지에서 책갈피를 수동으로 추출하려면 OnResolveBookmark를 재정의합니다. 서비스가 아닌 워크플로의 새 인스턴스를 만들려면 새 인스턴스를 만드는 작업을 정의하는 서비스 계약을 선언합니다. 만들기 작업은 IDictionary<문자열, 개체>를 사용하여 필수 워크플로 매개 변수를 전달해야 합니다. 이 계약은 WorkflowHostingEndpoint 파생 클래스에 의해 암시적으로 구현됩니다. 워크플로를 호스팅할 때는 AddServiceEndpoint를 호출하여 WorkflowHostingEndpoint 파생 클래스를 추가하고 Open을 호출합니다. 워크플로의 인스턴스를 만들려면 서비스 계약 형식의 ChannelFactory를 만들고 CreateChannel를 호출합니다. 그러면 서비스 계약에 정의된 만들기 작업을 호출할 수 있습니다.

참고 항목

개념

메시징 작업 사용

기타 리소스

워크플로 서비스