다음을 통해 공유


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

워크플로 인스턴스의 런타임 상태를 영속 저장소에 저장하고 해당 저장소에서 상태를 검색하도록 유지 서비스를 구현할 수 있습니다. 워크플로 실행 중의 특정 커밋 지점에서 Windows Workflow Foundation 런타임 엔진은 유지 서비스에 워크플로의 상태 정보를 유지하도록 알립니다. 이러한 상황은 워크플로가 유휴 상태가 되거나, TransactionScopeActivity 활동의 실행이 완료되거나, 호스트 응용 프로그램에서 Unload 메서드를 호출하는 경우 등에 발생할 수 있습니다.

Windows Workflow Foundation 런타임 엔진은 자체적으로 상태 정보를 유지하지 않습니다. 이 기능은 런타임에 엔진에 추가된 사용자 지정 유지 서비스에서 제공됩니다. 런타임 엔진은 유지 작업을 시작하는 일을 담당하고 사용자 지정 유지 서비스는 유지된 상태 데이터를 저장하고 로드하는 일을 담당합니다.

경고

TransactionScopeActivity 활동, CompensatableTransactionScopeActivity 활동, CompensatableSequenceActivity 활동 또는 PersistOnCloseAttribute 특성을 사용하거나 ICompensatableActivity 인터페이스를 구현하는 사용자 지정 활동을 사용하는 워크플로를 만드는 경우 사용할 유지 서비스를 지정해야 합니다. 이렇게 하지 않으면 워크플로를 실행할 때 예외가 throw됩니다.

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

WorkflowPersistenceService 추상 기본 클래스에서 파생시켜 사용자 지정 유지 서비스를 만들 수 있습니다. 이 기본 클래스에는 유지 서비스를 만들 때 재정의해야 하는 다섯 가지 추상 메서드가 포함되어 있습니다. 이러한 메서드가 다음 표에 나와 있습니다.

메서드 설명

LoadCompletedContextActivity

지정된 완료한 범위를 메모리에 로드합니다.

LoadWorkflowInstanceState

지정된 워크플로 인스턴스 상태를 메모리에 로드합니다.

SaveCompletedContextActivity

지정된 완료한 범위를 데이터 저장소에 저장합니다.

SaveWorkflowInstanceState

워크플로 인스턴스 상태를 데이터 저장소에 저장합니다.

UnlockWorkflowInstanceState

지정된 워크플로 인스턴스 상태의 잠금을 해제합니다.

UnloadOnIdle

지정된 워크플로 인스턴스가 특정 기간 동안 유휴 상태가 될 때 저장소에 유지할지 여부를 결정합니다.

Windows Workflow Foundation 엔진에서 사용자 지정 유지 서비스를 통해 워크플로 인스턴스 상태를 저장하여 워크플로를 언로드하는 방법을 보여 주는 샘플을 보려면 Custom Persistence Service를 참조하십시오.

워크플로 상태 정보 잠그기

Windows Workflow Foundation 런타임 엔진은 여러 프로세스에서 실행되는 서로 다른 유지 서비스에서 단일 워크플로를 로드하는 것을 막기 위해 워크플로 상태 정보를 잠글 수 있습니다. 그러나 실제 잠금 메커니즘은 사용자 지정 유지 서비스 자체에서 구현됩니다. 이는 유지 서비스를 만들 때 잠금 지원이 선택적임을 의미합니다. 워크플로 상태의 잠금을 지원하도록 선택하는 경우 SaveWorkflowInstanceState가 호출될 때와 LoadWorkflowInstanceState가 호출될 때 잠금 해제 매개 변수가 false로 설정되어 있으면 워크플로 상태에 대한 액세스를 잠가야 합니다. 워크플로 상태 정보는 이후의 SaveWorkflowInstanceState 호출에서 잠금 해제 매개 변수가 true로 설정되거나 UnlockWorkflowInstanceState 메서드가 호출될 때까지 잠긴 상태로 유지되어야 합니다. 프로세스에서 잠긴 상태에 있는 워크플로 인스턴스 상태를 로드하려고 하면 WorkflowOwnershipException을 throw해야 합니다.

트랜잭션을 사용하여 워크플로 상태 정보 유지

사용자 지정 유지 서비스에서 영속 저장소를 사용하는 경우 워크플로 트랜잭션 일괄 처리를 사용하여 워크플로 커밋 지점에 도달할 때까지 워크플로 상태 정보를 쓰는 작업을 연기해야 합니다. 이렇게 하려면 사용자 지정 유지 서비스 클래스에서 IPendingWork 인터페이스를 구현하고 영속 저장소에 대한 보류 중인 변경을 나타내는 작업 항목을 WorkBatch 속성에 추가합니다.

참고 항목

참조

WorkflowPersistenceService

개념

유지 개요
Windows Workflow 유지 서비스

기타 리소스

Custom Persistence Service
Using Persistence Services
Windows Workflow Foundation 서비스 개발

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.