다음을 통해 공유


워크플로의 상태 정보 일괄 처리

워크플로는 유지 지점이라는 다양한 검사점에서 상태를 영구 저장소에 주기적으로 저장합니다. 워크플로에 잘못된 것이 있는 경우 런타임 엔진은 안정적인 상태로 되돌리기 위해 유지되는 해당 정보를 검색해야 할 수 있습니다. 둘 이상의 구성 요소가 통신하는 경우 구성 요소의 상태가 일관성을 갖도록 유지를 조정하는 것이 유용한 경우가 많습니다. 작업 일괄 처리는 워크플로 외부의 서비스에서 상태 정보를 유지하는 데 사용됩니다. 이러한 서비스는 작업 항목을 일괄 처리하고 동일한 트랜잭션을 워크플로의 트랜잭션으로 공유합니다. 워크플로에서 트랜잭션을 커밋하지 않는 경우 일부 작업 항목이 유지 지점 중에 서비스에서 여전히 일괄 처리될 수 있습니다.

Windows Workflow Foundation에서는 서비스와 워크플로 인스턴스가 상태 정보를 쉽게 유지할 수 있도록 IWorkBatchIPendingWork를 제공합니다.

워크플로에서 시작된 서비스에 대한 모든 호출에서 런타임 엔진은 스레드 호출 컨텍스트에서 IWorkBatch를 제공합니다. 서비스에서는 런타임 엔진이 단일 트랜잭션에서 관련된 모든 작업 항목을 커밋할 수 있도록 보류 중인 작업 항목을 이 작업 일괄 처리에 추가할 수 있습니다. 작업 항목을 일괄 처리에 추가하거나 일괄 처리에 등록하려면 다음 문을 사용합니다.

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

또한 IPendingWorkExternalDataEventArgs에 대한 생성자에 전달할 수 있습니다.

구성 요소가 호출될 때의 작업 순서

  1. 초기화 중에 워크플로는 작업 일괄 처리를 만듭니다.

  2. 워크플로는 작업 일괄 처리를 구성 요소에 대한 메서드 호출에 추가합니다. 서비스는 WorkflowEnvironment 클래스를 사용하여 메서드에서 작업 일괄 처리에 액세스할 수 있습니다.

커밋 지점에서의 작업 순서

  1. 워크플로는 트랜잭션을 만듭니다.

  2. 워크플로는 작업 일괄 처리를 반복하고 구성 요소에 대한 모든 작업 항목을 순서가 유지된 상태로 수집하여 작업 일괄 처리를 만듭니다. 워크플로는 구성 요소에 대해 Commit 메서드를 호출하여 트랜잭션과 작업 일괄 처리를 전달합니다.

  3. 구성 요소는 작업 일괄 처리의 작업을 트랜잭션에 추가합니다.

  4. 2단계와 3단계가 작업 일괄 처리의 작업 항목이 포함된 모든 구성 요소에 대해 반복됩니다.

  5. Commit 알림이 성공적이면 워크플로는 해당 트랜잭션을 커밋합니다.

  6. 트랜잭션을 성공적으로 커밋하면 워크플로는 2단계와 마찬가지로 작업 일괄 처리를 반복하고 구성 요소별로 모든 작업 항목을 수집합니다. 워크플로는 각 구성 요소에 대해 Complete 메서드를 호출하여 해당 트랜잭션과 작업 일괄 처리를 전달합니다.

워크플로 오류 시의 작업 순서

  1. 워크플로는 오류 범위와 관련된 모든 작업 항목을 식별하고 작업 일괄 처리를 생성합니다.

  2. 워크플로는 작업 일괄 처리의 모든 작업에 대해 완료 상태를 false로 설정하여 각 고유 IPendingWorkComplete 메서드를 호출합니다.

  3. 워크플로는 작업 일괄 처리가 TransactionScopeActivity 활동이나 CompensatingTransactionScopeActivity 활동의 자식 컨텍스트에 속한 경우 작업 일괄 처리의 모든 작업을 취소합니다.

  4. 런타임은 오류에서 복구한 후 모든 나머지 작업 일괄 처리 항목에 대한 참조를 유지 관리합니다. 해당 작업은 이후 유지 지점에서 커밋될 수 있습니다.

작업 일괄 처리 트랜잭션 재시도

DefaultWorkflowCommitWorkBatchService, SharedConnectionWorkflowCommitWorkBatchService, SqlWorkflowPersistenceServiceSqlTrackingService에는 모두 작업 일괄 처리 커밋을 다시 시도하는 기능이 있습니다. 이러한 서비스는 EnableRetries 속성을 통해 사용할 수 있는 이 기능을 통해 네트워크 시간 초과, 시스템 재부팅, SQL Server 프로세스 재설정 등의 경우에 작업 일괄 처리 커밋을 계속 시도할 수 있습니다.

재시도 횟수는 20으로 설정됩니다. 처음 세 번의 재시도는 차례대로 즉시 발생하지만 그 다음부터는 재시도 간에 지연이 있습니다. 응용 프로그램은 연결 문자열에서 연결 시간 제한을 조정하여 재시도 간격을 부분적으로 조정할 수 있습니다.

이 속성은 프로그래밍 방식으로나 구성 파일을 통해 설정할 수 있습니다. 프로그래밍 방식으로 이 속성을 설정하는 방법에 대한 자세한 내용은 각 서비스에 대한 EnableRetries 속성을 참조하십시오. 구성 파일을 통해 이 속성을 설정하는 방법에 대한 자세한 내용은 Workflow Configuration Files을 참조하십시오.

참고 항목

개념

워크플로 및 응용 프로그램 통신

기타 리소스

Using Transaction Services Sample
워크플로 개발

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.