다음을 통해 공유


Windows Workflow 유지 서비스

비즈니스 프로세스 중 상당수는 완료하는 데 최대 몇 개월이나 몇 년씩 오랜 시간이 걸립니다. 워크플로를 메모리에 두는 것은 메모리 제한 때문에 비현실적일 뿐만 아니라 인스턴스가 단일 서버에서 처리되어야 하므로 확장도 불가능하게 합니다. 이렇게 장기간 실행되는 워크플로 중 상당수는 흐름 또는 프로세스 논리를 실행하지 않으며, 사용자나 다른 시스템의 입력을 기다리면서 사실상 유휴 상태에 있습니다. 유휴 인스턴스를 언로드하면 호스트 응용 프로그램에서 메모리를 절약할 수 있으며 처리 서버 간의 확장도 가능해집니다.

워크플로가 실행되는 동안 특정 조건이 발생하면 워크플로 런타임 엔진에서 유지 서비스(런타임에 로드되는 경우)를 사용하여 워크플로 인스턴스에 대한 상태 정보를 유지합니다. 이러한 조건은 다음과 같습니다.

이러한 조건 중 하나가 충족되고 유지 서비스가 런타임 엔진에 추가되는 경우 런타임 엔진은 유지 서비스에서 제공하는 메서드를 호출하여 워크플로 인스턴스에 대한 상태 정보를 저장합니다. 이와 마찬가지로 워크플로 런타임 엔진은 이전에 유지된 워크플로 인스턴스를 복원해야 하는 경우 유지 서비스에서 제공하는 메서드를 호출하여 이 상태 정보를 로드합니다. 즉, 워크플로 런타임 엔진은 유지가 발생해야 하는 시기를 결정하지만 필요한 유지 작업을 수행하는 것은 유지 서비스가 담당합니다.

SqlWorkflowPersistenceService로 관리되는 또 다른 워크플로 상태는 타이머 정보입니다. 워크플로 정의 내에서 DelayActivity 활동을 구성하고 SqlWorkflowPersistenceService와 같은 유지 서비스를 사용할 때마다 활동과 관련된 시간 범위 정보가 워크플로 상태의 일부로 유지됩니다. 워크플로 런타임에서 워크플로 인스턴스를 확인할 때마다 보류 중인 타이머 이벤트가 처리됩니다.

유지 서비스 만들기

WorkflowPersistenceService 클래스에서 클래스를 파생시켜 유지 서비스를 만들 수 있습니다. AddService를 호출하거나 응용 프로그램 구성 파일에 해당 항목을 만들어 워크플로 런타임 엔진에 유지 서비스를 추가할 수 있습니다. Windows Workflow Foundation에서는 있는 그대로 사용하거나 확장할 수 있는 기본 유지 서비스인 SqlWorkflowPersistenceService 클래스를 제공합니다. 사용자 지정 유지 서비스를 만드는 방법에 대한 자세한 내용은 사용자 지정 유지 서비스 만들기를 참조하십시오. SqlWorkflowPersistenceService 클래스 사용에 대한 자세한 내용은 SqlWorkflowPersistenceService 사용을 참조하십시오.

참고

WorkflowRuntime에는 유지 서비스가 하나만 포함되어야 합니다.

워크플로 상태 정보 잠그기

워크플로 런타임 엔진에는 다른 프로세스에서 실행 중인 유지 서비스가 단일 데이터 저장소에 액세스할 수 있는 환경에서 사용할 워크플로 상태 정보를 잠그기 위한 의미 체계가 있습니다. WorkflowPersistenceService 클래스를 통해 데이터 저장소에서 워크플로 인스턴스의 상태 정보에 대한 잠금을 해제해야 할지 여부를 지정하는 SaveWorkflowInstanceState에 대한 매개 변수를 제공하고 이전에 잠긴 워크플로 상태 정보의 잠금을 해제하는 UnlockWorkflowInstanceState 메서드를 제공하여 워크플로 런타임 엔진의 이 기능을 지원할 수 있습니다. 잠금을 구현하는 유지 서비스에서 LoadWorkflowInstanceState를 호출하면 워크플로 인스턴스에 대한 상태 정보가 잠겨야 합니다.

사용자 고유의 유지 서비스를 만들 때 서비스가 데이터 저장소에 상태 정보를 저장하지 않거나 데이터 저장소에서 상태 정보를 로드하지 않는 경우 PersistenceException을 throw합니다. 워크플로 런타임 엔진에서는 이러한 동작을 예상합니다.

유지 서비스 일괄 처리 동작

영속 저장소를 사용하여 워크플로 상태 정보를 저장하는 서비스에 대해 일괄 처리 메커니즘이 제공됩니다. 이 경우 유지 서비스에서 사용하는 영속 저장소와 워크플로 런타임 엔진의 내부 상태 간에 일관성을 유지하는 것이 중요합니다. IPendingWork 인터페이스에서 정의하는 기능을 서비스에 추가한 다음 데이터 저장소에 대한 변경 내용을 작업 항목으로 WorkBatch에 추가하여 WorkflowCommitWorkBatchService 서비스에서 제공하는 워크플로 트랜잭션 일괄 처리에 참여할 수 있습니다. 자세한 내용은 SaveCompletedContextActivity 또는 SaveWorkflowInstanceState를 참조하십시오.

복잡한 호스팅 시나리오

Windows Workflow Foundation 솔루션 배포의 가능한 시나리오는 서로 다른 데스크톱 및 서버 구성에서 실행되는 각기 다른 서비스 집합을 가진 여러 호스트 응용 프로그램을 만드는 것입니다. 이러한 시나리오에서는 솔루션에 정의된 일부 워크플로가 특정 시스템에서만 실행될 수 있다는 요구 사항이 있을 수 있습니다. SqlWorkflowPersistenceService 서비스와 같은 Windows Workflow Foundation의 기본 서비스는 이러한 종류의 구성을 지원하지 않습니다. 각 시스템에 로드되는 워크플로 인스턴스를 제어하려면 사용자 지정 유지 서비스를 만들어야 합니다. 자세한 내용은 사용자 지정 유지 서비스 만들기를 참조하십시오.

참고 항목

참조

SqlWorkflowPersistenceService
SqlPersistenceWorkflowInstanceDescription
WorkflowPersistenceService
WorkBatch

개념

SqlWorkflowPersistenceService 사용
사용자 지정 유지 서비스 만들기

기타 리소스

Windows Workflow Foundation 서비스
연습 4: 런타임 서비스 사용
Using Persistence Services

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.