다음을 통해 공유


일시 중단된 인스턴스 관리

SuspendedInstanceManagement 샘플 일시 중단된 워크플로 인스턴스를 관리하는 방법을 보여 줍니다. WorkflowUnhandledExceptionBehavior 기본 동작은 AbandonAndSuspend. 즉, 기본적으로 WorkflowServiceHost에 호스팅된 워크플로 인스턴스에서 처리되지 않은 예외가 발생하면 인스턴스가 메모리에서 폐기되고 (중단됨), 지속성 있는 인스턴스 버전은 일시 중단됨으로 표시됩니다. 일시 중단된 워크플로 인스턴스는 일시 중단되지 않을 때까지 실행할 수 없습니다.

샘플에서는 명령줄 유틸리티를 구현하여 일시 중단된 인스턴스를 쿼리하는 방법과 사용자에게 인스턴스를 다시 시작하거나 종료하는 옵션을 제공하는 방법을 보여 줍니다. 이 샘플에서 워크플로 서비스는 의도적으로 예외를 던져 일시 중단 상태가 됩니다. 그런 다음 명령줄 유틸리티를 사용하여 인스턴스를 쿼리한 후 인스턴스를 다시 시작하거나 종료할 수 있습니다.

보여 줍니다

Windows Workflow Foundation(WF)에서 WorkflowServiceHostWorkflowUnhandledExceptionBehaviorWorkflowControlEndpoint와 함께 사용.

토론

이 샘플에서 구현된 명령줄 유틸리티는 .NET Framework 4.6.1에 제공되는 SQL 인스턴스 저장소 구현과 관련이 있습니다. 인스턴스 저장소의 사용자 지정 구현이 있는 경우 샘플의 WorkflowInstanceCommand 구현을 인스턴스 저장소와 관련된 구현으로 바꿔 이 유틸리티를 적용할 수 있습니다.

제공된 구현은 SQL 인스턴스 저장소에 직접 SQL 명령을 실행하여 일시 중단된 인스턴스를 나열하며, 인스턴스를 다시 시작하거나 종료하기 위해 WorkflowServiceHostWorkflowControlEndpoint을 추가하여 의존합니다.

샘플을 설정, 빌드 및 실행하려면

  1. 이 샘플을 사용하려면 다음 Windows 구성 요소를 사용하도록 설정해야 합니다.

    1. 마이크로소프트 메시지 큐(MSMQ) 서버

    2. SQL Server Express

  2. SQL Server 데이터베이스를 설정합니다.

    1. Visual Studio 명령 프롬프트에서 SuspendedInstanceManagement 샘플 디렉터리에서 "setup.cmd"를 실행합니다. 이 디렉터리에서 다음을 수행합니다.

      1. SQL Server Express를 사용하여 지속성 데이터베이스를 만듭니다. 지속성 데이터베이스가 이미 있는 경우 삭제되고 다시 만들어집니다.

      2. 지속성을 위해 데이터베이스를 설정합니다.

      3. 지속성을 위해 데이터베이스를 설정할 때 정의된 InstanceStoreUsers 역할에 IIS APPPOOL\DefaultAppPool 및 NT AUTHORITY\Network Service를 추가합니다.

  3. 서비스 큐를 설정합니다.

    1. Visual Studio에서 SampleWorkflowApp 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로설정합니다.

    2. F5눌러 SampleWorkflowApp을 컴파일하고 실행합니다. 그러면 필요한 큐가 생성됩니다.

    3. 을 누르고을 입력하여 SampleWorkflowApp을 중지합니다.

    4. 명령 프롬프트에서 Compmgmt.msc를 실행하여 컴퓨터 관리 콘솔을 엽니다.

    5. 서비스 및 애플리케이션, 메시지 큐, 프라이빗 큐확장합니다.

    6. ReceiveTx 큐를 마우스 오른쪽 단추로 클릭하고 속성선택합니다.

    7. 보안 탭을 선택하고 모든 메시지 수신, 메시지 피킹및 메시지 보내기권한이 있도록 허용합니다.

  4. 이제 샘플을 실행합니다.

    1. Visual Studio에서 F5Ctrl 키를 눌러 디버깅하지 않고 SampleWorkflowApp 프로젝트를 다시 실행합니다. 콘솔 창에 두 개의 엔드포인트 주소가 출력됩니다. 하나는 애플리케이션 엔드포인트용이고 다른 하나는 WorkflowControlEndpoint와 관련된 것입니다. 그런 다음 워크플로 인스턴스가 만들어지고 해당 인스턴스에 대한 추적 레코드가 콘솔 창에 표시됩니다. 워크플로 인스턴스가 예외를 발생시켜 인스턴스가 일시 중단되고 종료됩니다.

    2. 그런 다음 명령줄 유틸리티를 사용하여 이러한 인스턴스에 대한 추가 작업을 수행할 수 있습니다. 명령줄 인수의 구문은 다음과 같습니다.

      SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]

      지원되는 명령은 Query, ResumeTerminate. InstanceId 스위치는 ResumeTerminate 작업에만 필요합니다.

정리하려면(선택 사항)

  1. Compmgmt.msc를 실행하여 컴퓨터 관리 콘솔을 엽니다.

  2. 서비스 및 애플리케이션, 메시지 큐, 개인 큐를 확장합니다.

  3. ReceiveTx 큐를 삭제합니다.

  4. 지속성 데이터베이스를 제거하려면 cleanup.cmd 실행합니다.