다음을 통해 공유


Workflow Management Service

WMS(워크플로 관리 서비스)는 워크플로 서비스 인스턴스에 대해 다음과 같은 관리 서비스를 제공하는 Windows 서비스입니다.

  • 워크플로 서비스 인스턴스 활성화. WMS는 인스턴스가 활성화 가능해질 때 인스턴스 저장소에서 워크플로 서비스 인스턴스를 활성화합니다. 인스턴스 저장소의 워크플로 서비스 인스턴스는 인스턴스가 실행 가능해지고 인스턴스와 일치하는 서비스 호스트가 로컬 컴퓨터에서 실행되고 있지 않은 경우 활성화 가능한 것으로 간주됩니다. 다음 목록에는 인스턴스가 실행 가능해지는 이유가 나와 있습니다.

    • 지연 활동이 완료될 때까지 기다리는 동안 인스턴스가 언로드 및 유지되고 지연 활동이 완료됩니다.

    • 인스턴스가 로드된 동안 서비스 호스트가 종료됩니다.

    • 인스턴스에 해당 인스턴스에 대한 만료된 인스턴스 잠금이 있습니다.

  • 사용자 제어 명령 실행. 인스턴스 저장소의 인스턴스 제어 공급자는 Windows PowerShell instance-control cmdlet에서 받은 명령을 인스턴스 저장소의 큐에 추가합니다. 이 큐는 인스턴스 제어 공급자에서 만들고 유지 관리합니다. WMS는 큐에서 명령을 검색하여 실행한 다음 명령 실행이 성공적인 경우 큐에서 명령을 삭제합니다.

항목의 나머지 부분에서는 이러한 서비스를 자세히 설명합니다. WMS 설치 및 구성에 대한 자세한 내용은 워크플로 관리 서비스 설치 및 구성을 참조하십시오.

워크플로 서비스 인스턴스 활성화

기본적으로 WMS는 활성화 가능한 워크플로 인스턴스를 모니터링해야 하는 인스턴스 저장소를 검색합니다. 서비스를 시작하는 동안 및 해당 구성 파일 중 하나가 변경될 때 루트, 사이트 및 응용 프로그램 수준에서 Web.config 파일을 검색하여 이 작업을 수행합니다. 또한 WMS가 인스턴스 저장소를 자동으로 검색하게 하지 않고 WMS에서 모니터링할 특정 인스턴스 저장소를 지정할 수 있습니다.

WMS는 InstanceStore 개체를 만들고 발견한 각 인스턴스 저장소에 대해 HasActivatableWorkflowEvent를 구독합니다. 인스턴스 저장소는 저장소에서 활성화 가능한 워크플로 인스턴스를 발견할 때 HasActivatableWorkflowEvent를 발생시킵니다. 그런 다음 인스턴스 저장소는 QueryActivatableWorkflowsCommand가 저장소에 대해 한 번 호출될 때까지 모니터링을 중지합니다.

WMS가 HasActivatableWorkflowEvent를 수신하면 인스턴스 저장소에 대해 QueryActivatableWorkflowsCommand를 실행하여 워크플로 호스트를 만드는 데 사용할 활성화 매개 변수를 가져옵니다.

그런 다음 WMS는 해당 인스턴스를 활성화해야 하는 서비스가 포함된 응용 프로그램에서 지원되는 서비스 관리 서비스를 호출하고 활성화 매개 변수를 전달합니다. AppFabric에서 서비스 관리 서비스, WCF 서비스를 serviceManagement 특성이 활성화된 모든 응용 프로그램에 자동으로 추가합니다. 서비스 관리 서비스는 WMS가 사이트 이름, 가상 응용 프로그램 경로 및 잘 알려진 서비스 활성화 끝점 주소를 사용하여 구성한 주소를 통해 액세스하는 서비스 활성화 끝점을 노출합니다. WMS는 이 끝점에 net.pipe 바인딩을 사용합니다. 이 서비스에 대한 자세한 내용은 서비스 관리 서비스를 참조하십시오.

서비스 관리 서비스는 WMS에서 수신한 활성화 매개 변수를 사용하여 워크플로 서비스 호스트를 활성화합니다. 서비스 호스트는 SQL 워크플로 인스턴스 저장소와 같은 인스턴스 저장소를 만들고 저장소에 대해 메서드를 호출하여 워크플로 서비스 인스턴스를 인스턴스 저장소에서 메모리로 로드합니다.

워크플로 관리 서비스 - 인스턴스 활성화

경고

WMS는 구성 파일에서 SWIS(SQL 워크플로 인스턴스 저장소) 동작과 해당 인스턴스 저장소 정의에 대한 변경 내용을 즉시 확인하고 해당 저장소의 모니터링을 시작합니다. 그러나 응용 프로그램 도메인이 재활용될 때까지 응용 프로그램은 이전 버전의 구성 파일에서 SWIS 동작에 지정된 인스턴스 저장소를 계속 사용합니다. 응용 프로그램 도메인은 httpRuntime 요소의 delayNotificationTimeout 특성에 지정된 기간 후에 재활용됩니다. 예를 들어, delayNotificationTimeout을 5000(<httpRuntime delayNotificationTimeout = "5000" />)으로 설정하면 응용 프로그램 도메인은 5000초 동안 재활용되지 않습니다.

경고

총 1000개 이상의 서비스가 포함된 응용 프로그램 또는 응용 프로그램 풀을 사용하지 않도록 설정하면 WMS에서 활성화 가능한 서비스 인스턴스를 더 이상 활성화하지 못할 수도 있습니다. 해결 방법은 응용 프로그램/응용 프로그램 풀을 비활성화하거나 사용하지 않도록 설정하기 전에 이러한 응용 프로그램/응용 프로그램 풀에 속하는 서비스 인스턴스를 일시 중단하는 것입니다.

사용자 제어 명령 실행

Windows PowerShell cmdlet을 사용하여 워크플로 서비스 인스턴스에 대해 명령을 실행하면 인스턴스 제어 공급자가 서비스에 사용된 인스턴스 저장소의 명령 큐에 명령을 추가합니다. 명령 큐는 인스턴스 제어 공급자에서 유지 관리됩니다.

WMS는 명령을 모니터링해야 하는 인스턴스 저장소를 자동으로 검색합니다. 시작하는 동안 및 해당 구성 파일 중 하나가 변경될 때 루트, 사이트 및 응용 프로그램 수준에서 Web.config 파일을 검색하여 이 작업을 수행합니다. WMS는 발견한 각 인스턴스 저장소에 대한 인스턴스 제어 공급자를 만들고 명령에 대해 공급자를 정기적으로 폴링합니다. 특히 WMS는 인스턴스 제어 공급자에 대해 BeginTryReceive 메서드를 호출하여 명령을 수신합니다.

인스턴스 제어 공급자는 명령을 검색하지만 인스턴스 저장소의 명령 큐에서 명령을 삭제하지 않고 명령을 WMS로 반환합니다. 공급자는 짧은 만료 시간이 있는 잠금을 명령 큐의 명령에 배치합니다.

그런 다음 WMS는 워크플로 서비스 호스트에서 노출된 ICE(인스턴스 제어 끝점)의 해당 메서드를 호출하여 대상 워크플로 서비스 인스턴스에 대해 명령을 실행합니다. WMS는 인스턴스 제어 끝점이 net.pipe 바인딩을 허용하고 전송 보안을 사용하도록 요청합니다. WMS는 사이트 이름, 가상 서비스 경로 및 잘 알려진 ICE 경로를 결합하여 끝점 주소를 구성합니다. 인스턴스 제어 공급자는 사이트 이름과 가상 서비스 경로 정보를 제공합니다. ICE 바인딩은 net.pipe 바인딩으로 하드 코드됩니다.

명령 실행에 성공하면 WMS가 인스턴스 제어 공급자에 대해 Complete 메서드를 호출하고 공급자가 명령 큐에서 해당 명령을 제거합니다. 명령 실행에 실패하면 WMS가 인스턴스 제어 공급자에 대해 실패에 대한 Abandon 메서드를 호출하고 공급자는 명령 큐에서 해당 명령을 제거하거나 추가적인 재시도를 위해 해당 명령을 명령 큐에 유지할지 여부를 결정합니다. SQL 워크플로 인스턴스 저장소의 인스턴스 제어 공급자는 명령 큐에서 명령을 제거하기 전에 명령을 5회 시도합니다. 명령 실행 중에 WMS 작동이 중단되면 잠금이 만료되고, 나중에 동일한 WMS 인스턴스나 다른 WMS 인스턴스가 해당 명령을 선택할 수 있습니다.

워크플로 관리 서비스 - 명령 실행

MSDTC(Microsoft Distributed Transaction Coordinator)를 사용할 수 있고 MSDTC가 인바운드 및 아웃바운드 통신을 사용하도록 설정한 경우 인스턴스 제어 명령이 트랜잭션 방식으로 실행됩니다. 예를 들어, 워크플로 서비스 인스턴스를 일시 중단하는 경우 상태가 IIS 관리자에 표시되거나 명령이 처리된 후 즉시 cmdlet에서 일시 중단으로 반환됩니다. 그러나 MSDTC를 사용할 수 없거나 제대로 구성되어 있지 않은 경우에는 인스턴스 제어 명령이 비트랜잭션 방식으로 실행됩니다. 이 경우 인스턴스가 언로드되기 전에는 인스턴스 상태가 일시 중단으로 업데이트되지 않으며, 인스턴스가 지정한 기간(유휴 상태 시 언로드 설정)보다 오랫동안 유휴 상태였기 때문에 상태가 인스턴스 저장소에 지속됩니다. MSDTC 설정을 변경하는 경우 서비스가 업데이트된 MSDTC 설정을 확인하도록 WMS를 다시 시작해야 합니다.

하나 이상의 인스턴스 제어 명령이 예상보다 오랫동안 보류 상태로 유지되는 경우 서버 팜의 각 서버에서 WMS가 실행되고 있는지 여부를 확인해야 합니다. 모니터링 정보를 기준으로 특정 서버에서 현재 인스턴스가 실행 중이고 해당 인스턴스에 대해 실행된 제어 명령이 실행되고 있지 않으면 서버에서 WMS가 실행 중인지 확인해야 합니다.

경고

워크플로 관리 서비스는 "인바운드 허용" 및 "아웃바운드 허용" DTC 설정을 사용할 수 있는 경우 트랜잭션 명령을 사용합니다. DTC를 사용하지 않도록 설정하는 경우, 비트랜잭션 명령이 사용되도록 이러한 설정도 명시적으로 사용하지 않도록 설정해야 합니다.

서버 팜 환경 지원

일반적으로 서버 팜의 각 노드에서는 하나의 WMS 인스턴스를 실행합니다. WMS 인스턴스는 여러 인스턴스 저장소를 모니터링할 수 있습니다. 한 노드에서는 서로 다른 Windows ID로 여러 WMS 인스턴스를 실행할 수 있습니다. 노드에서 인스턴스 저장소에 대해 하나의 WMS 인스턴스만 실행하는 것이 좋습니다. 동일한 인스턴스 저장소를 모니터링하는 동일한 노드에서 여러 WMS 인스턴스를 실행하면 확장성 문제가 발생할 수 있습니다.

이전에 한 노드에서 실행된 인스턴스는 다른 노드에서 해당 WMS에 의해 선택되거나 해당 노드에서 활성화될 수 있습니다. 이를 통해 서버 팜 전체에서 WMS에 대한 작업 부하를 분산할 수 있습니다.

워크플로 인스턴스에 대한 제어 명령을 실행하면 해당 워크플로 인스턴스가 팜의 어느 곳에서나 실행되거나 실행되지 않을 수 있습니다. WMS는 워크플로를 실행하는 컴퓨터에 명령을 전달하거나 로컬 컴퓨터에 워크플로를 로드하고 명령을 실행하도록 지시합니다. 이를 통해 인스턴스가 실행되고 있는 컴퓨터에 대해 잘 모르는 경우에도 인스턴스에 대해 명령을 실행할 수 있습니다.

종속 기능

다음 내용은 WMS(워크플로 관리 서비스)에 적용됩니다.

  • WMS는 명령을 활성화하고 IIS/WAS 환경에서만 WorkflowServiceHost를 사용하여 호스트되는 워크플로 서비스 인스턴스에 대해 실행합니다. WMS는 다른 호스트를 사용하여 호스트되거나 다른 호스팅 환경에서 호스트되는 워크플로 서비스를 지원하지 않습니다.

  • WMS는 지속적 상태 지속성에 대해 인스턴스 저장소를 사용하는 워크플로 서비스의 인스턴스를 활성화합니다.

  • WMS는 서비스 관리 서비스를 제공하는 응용 프로그램에 속한 워크플로 서비스의 인스턴스를 활성화합니다. WMS는 서비스 관리 서비스를 사용하여 서비스 호스트를 활성화하고 해당 서비스 호스트가 인스턴스 저장소에서 인스턴스를 로드합니다.

  • WMS를 사용하려면 사이트에 net.pipe 바인딩을 추가해야 하고 서비스가 포함된 응용 프로그램에서 net.pipe 프로토콜을 사용하도록 설정해야 합니다. WMS는 응용 프로그램에서 net.pipe 프로토콜을 사용할 수 없는 경우 이벤트 로그에 오류를 로깅합니다.

  • WMS는 워크플로 서비스 인스턴스가 ICE(인스턴스 제어 끝점)를 노출하도록 요청합니다. WMS는 이 끝점을 사용하여 워크플로 서비스 인스턴스에 대해 일시 중단 및 다시 시작과 같은 명령을 실행합니다.

  • WMS는 인스턴스 저장소 공급자 및 인스턴스 제어 공급자와 함께 제공되는 인스턴스 저장소에서 작동합니다.

  • WMS는 인스턴스가 활성화 가능해질 때 인스턴스 저장소가 HasActivatableWorkflowsEvent를 발생시키도록 요청합니다.

참고

WMS에 대한 보안 관련 정보를 보려면 지속성 저장소에 대한 보안 구성을 참조하십시오.

보안

WMS(워크플로 관리 서비스)는 워크플로 서비스 인스턴스를 제어하려면 워크플로 서비스 호스트에서 노출된 ICE(인스턴스 제어 끝점)에 연결되고, 워크플로 서비스 호스트를 시작하고 워크플로 서비스 인스턴스를 로드하려면 웹 응용 프로그램에서 노출된 서비스 관리 끝점에 연결되어야 합니다. AS_Administrators 그룹에는 이러한 끝점에 대한 액세스 권한이 있습니다. AppFabric 워크플로 관리 서비스의 SID(보안 식별자)는 이 그룹의 구성원입니다. 따라서 WMS 실행에 사용되고 있는 계정을 AS_Administrators 그룹에 명시적으로 추가할 필요가 없습니다.

다음 목록에서는 WMS가 사용하는 인스턴스 저장소와 구성 파일을 보호하기 위한 지침을 제공합니다.

  • WMS는 구성 파일에서 연결 문자열을 비롯한 구성 정보를 메모리로 읽어옵니다. WMS는 이때 암호화된 연결 문자열을 처리하지 않으므로 연결 문자열이 단순 텍스트 형식이어야 합니다. 악의적인 사용자는 메모리의 중요한 정보(예: 연결 문자열의 사용자 이름 및 암호)에 액세스할 수 있습니다. 따라서 구성 파일에 정의된 연결 문자열에는 중요한 정보를 지정하지 않아야 합니다.

    Web.config 파일에 저장된 연결 문자열에 대해 Windows 통합 인증을 사용하는 것이 좋습니다. Windows 통합 인증을 사용할 수 없고 Web.config 파일에 정의된 연결 문자열에 사용자 이름과 암호를 지정할 경우 구성 파일에서 적절한 ACL(액세스 제어 목록)을 설정합니다. AS_Administrators 그룹에 WMS가 액세스해야 하는 Web.config 파일에 대한 액세스 권한이 있는지 확인합니다. ACL을 설정해도 악의적인 사용자가 메모리의 연결 문자열 정보에 액세스하지 못하도록 차단할 수는 없습니다.

  • ";Encrypt=yes"를 SQL 연결 문자열에 추가하여 암호화된 SQL 통신을 사용하도록 설정합니다. SqlConnectionStringBuilder 클래스를 사용하여 연결 문자열을 빌드하는 경우 Encrypt 속성을 true로 설정합니다. 서버에서 암호화된 통신을 사용하도록 설정하는 방법에 대한 자세한 내용은 https://go.microsoft.com/fwlink/?LinkID=187283을 참조하십시오. 응용 프로그램과 SQL Server 간의 통신에 보안을 설정하지 않으면 악의적인 사용자가 SQL Server 데이터베이스를 조작하거나 SQL Server 데이터베이스에 대해 명령을 실행할 수 있습니다.

  • 명령 큐는 자격 증명 정보를 유지 관리하지 않습니다. WorkflowAdministrators SQL 역할에 매핑된 AS_Administrators 그룹의 구성원인 사용자는 특정 유형의 인스턴스가 아니라 인스턴스 저장소의 모든 인스턴스를 제어할 수 있는 권한을 가집니다. 따라서 서로 다른 사용자가 제어할 의도가 아닌 인스턴스는 서로 다른 인스턴스 저장소에 저장해야 하고 이러한 인스턴스 저장소에 대한 WorkflowAdministrators SQL 역할은 서로 다른 Windows 그룹에 매핑되어야 합니다.

  • Web.config 파일이 수정될 때마다 WMS는 파일을 읽고 저장소 정의가 파일에서 추가되거나 제거되었는지 확인합니다. 인증되지 않은 사용자가 WMS 파일 처리를 트리거하지 못하게 하려면 Web.config 파일에 대한 쓰기 권한을 제한하는 것이 좋습니다.

  • 추적 수준에 따라 AppFabric 모니터링 기능이 데이터를 큰 비율로 수집합니다. 동일한 데이터베이스에 모니터링 및 지속성 저장소를 배치하지 않는 것이 좋습니다. 이런 방식으로 모니터링 저장소의 오버플로가 지속성 하위 시스템에 영향을 미치지 않습니다.

다음 표에는 명령 큐와 지속성 데이터베이스에 대한 액세스를 보호하는 SQL 역할이 설명되어 있습니다. 이 표의 내용은 SQL 워크플로 인스턴스 저장소에만 적용됩니다.

SQL 역할 설명 Windows 그룹

WorkflowAdministrators

이 역할의 구성원은 지속성 데이터베이스 일부인 명령 큐에 명령을 삽입(추가)할 수 있습니다. 예를 들어, Windows PowerShell cmdlet을 사용하여 인스턴스를 제어하려는 사용자는 이 역할의 구성원이어야 합니다.

AS_Administrators

WorkflowManagementServiceUsers

이 역할의 구성원은 명령 큐에서 명령을 제거(검색)합니다. WMS 실행에 사용되는 계정은 WMS가 명령 큐에 저장된 명령을 검색할 수 있도록 이 역할의 구성원이어야 합니다.

AS_Administrators

WorkflowActivationUsers

이 역할의 구성원은 지속성 데이터베이스에서 유지되고 실행할 준비가 된 워크플로 서비스 인스턴스를 활성화할 수 있습니다.

AS_Administrators

InstanceStoreObservers

이 역할의 구성원은 인스턴스 저장소를 인스턴스에 대해 쿼리하고 저장소의 명령 큐에서 명령을 검색할 수 있습니다.

AS_Administrators 및 AS_Observers

InstanceStoreUsers

이 역할의 구성원은 인스턴스를 로드하고 저장할 수 있습니다. 로드 및 저장 작업은 워크플로를 실행하는 서비스 호스트에서 수행됩니다.

서비스 Service1의 인스턴스가 인스턴스 저장소 Store1에서 유지되는 경우 서비스 호스트를 실행하는 응용 프로그램 풀 AppPool1은 Store1에 대한 사용자 권한을 가진 ID로 실행되어야 합니다.

IIS_USRS

지속성에 대한 시나리오 기반 보안 지침을 보려면 지속성 저장소에 대한 보안 구성을 참조하십시오.

참고 항목

개념

지속성 저장소에 대한 보안 구성
워크플로 관리 서비스 설치 및 구성

  2011-12-05