다음을 통해 공유


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

워크플로 런타임은 워크플로 실행의 결과를 커밋해야 할 때마다 WorkflowCommitWorkBatchService 서비스를 사용합니다. 트랜잭션 컨텍스트를 제공하는 등의 방법으로 커밋 논리가 실행되는 방법을 제어하기 위해 사용자 지정 WorkflowCommitWorkBatchService 서비스를 제공할 수 있습니다. WorkflowCommitWorkBatchService가 지정되지 않은 경우 워크플로 런타임은 시작될 때 DefaultWorkflowCommitWorkBatchService를 만듭니다.

사용자 지정 WorkflowCommitWorkBatchService 서비스를 만들려면 WorkflowCommitWorkBatchService 기본 클래스에서 파생시켜야 합니다. 이 클래스는 재정의할 수 있는 가상 메서드를 하나 정의합니다.

protected void CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback)

예를 들어, 워크플로 인스턴스에 대한 변경 내용을 유지할 때 커밋할 일괄 처리 작업이 있으면 이 메서드가 워크플로 런타임에서 호출됩니다. 이 메서드의 구현은 적절한 트랜잭션 범위에서 CommitWorkBatchCallback 메서드를 호출해야 합니다.

앰비언트 트랜잭션

기본 구현은 워크플로 인스턴스에서 발생한 앰비언트 트랜잭션이 있는지 확인합니다. 앰비언트 트랜잭션이 없는 경우 기본 구현은 앰비언트 트랜잭션을 만들고 CommitWorkBatch 대리자를 호출합니다. 그러나 앰비언트 트랜잭션이 있는 경우 기본 구현은 DependentCloneOption 열거형에서 BlockCommitUntilComplete를 지정하여 DependentTransaction을 만든 다음 앰비언트 트랜잭션을 새로 만들어진 DependentTransaction으로 설정합니다. 이렇게 하면 워크플로 인스턴스에서 생성된 앰비언트 트랜잭션이 작업 일괄 처리 커밋 작업이 완료될 때까지 완료될 수 없습니다. 예외가 발생하면 CommitWorkBatch 서비스가 트랜잭션을 롤백하고 예외를 다시 throw합니다. FaultHandlerActivity를 사용하여 이 예외를 catch할 수 있으므로 필요한 경우 트랜잭션을 다시 시도할 수 있습니다.

WorkflowCommitWorkBatchService에서 지원하는 유일한 앰비언트 트랜잭션 형식은 워크플로 인스턴스에서 발생하는 트랜잭션입니다. 호스트 응용 프로그램이나 워크플로 런타임을 실행하는 응용 프로그램에서 발생하는 앰비언트 트랜잭션은 파생 작업을 줄이기 위해 현재 스레드에서 일시적으로 제거됩니다. 워크플로가 유휴 상태가 된 후 호스트에 의해 포함된 원래 앰비언트 트랜잭션이 스레드에 다시 배치됩니다. 따라서 Windows Workflow Foundation은 외부에서 워크플로 인스턴스로 트랜잭션을 가져오는 기능을 지원하지 않습니다.

참고 항목

참조

DefaultWorkflowCommitWorkBatchService
WorkflowCommitWorkBatchService

개념

Windows Workflow CommitWorkBatch 서비스

기타 리소스

Windows Workflow Foundation 서비스 개발

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.