다음을 통해 공유


Using WorkflowCommitWorkBatch Service 샘플

Download sample

이 샘플에서는 Windows Workflow Foundation에서 사용자 지정 서비스가 해당 서비스가 사용되는 워크플로 인스턴스와 동일한 트랜잭션에 참여하는 방법을 보여 줍니다.

연결된 트랜잭션 동작이 있는 복합 활동에는 이 활동과 연결된 작업 일괄 처리도 존재합니다. 이 복합 활동에 포함된 임의의 활동이 호스트가 제공하는 서비스의 메서드를 호출할 경우 그 서비스 역시 작업 일괄 처리에 포함될 수 있습니다. 복합 활동이 완료되면 작업 일괄 처리가 커밋됩니다. 어떤 이유로 인해 커밋이 실패한 항목이 있을 경우 작업 일괄 처리 전체가 롤백됩니다. 커밋 프로세스 도중에 일괄 처리의 모든 항목에 트랜잭션 컨텍스트가 제공됩니다. 따라서 이 트랜잭션에 참여하려는 서비스 역시 트랜잭션 컨텍스트를 가지게 됩니다. 그런 다음 서비스는 자신이 수행하는 호출에 이 트랜잭션 컨텍스트를 전달할 수 있습니다. 예를 들어, 데이터베이스 호출도 동일한 트랜잭션에 참여하도록 데이터베이스 호출에 트랜잭션 컨텍스트를 전달하는 것이 가장 일반적입니다.

작업 일괄 처리 참여

작업 일괄 처리에 참여하려는 서비스는 IPendingWork라는 인터페이스를 구현해야 합니다.

작업 일괄 처리에 등록

작업 일괄 처리에 참여하려는 서비스 또는 참여해야 하는 모든 형식의 당사자는 작업 일괄 처리에 등록해야 합니다. 다음 시나리오에서는 작업 일괄 처리에 등록하는 데 필요한 단계를 설명합니다.

실행 과정에서 활동은 서비스의 메서드를 호출합니다. 메서드는 메서드의 실제 작업을 수행하지 않고 작업 일괄 처리 및 작업 완료에 필요한 컨텍스트를 등록하기만 합니다. 나중에 작업 일괄 처리가 커밋되면 Commit 메서드는 등록 시 사용된 컨텍스트와 함께 호출됩니다. 다시 말해서 메서드는 실제 작업을 수행하기 적절한 시점까지 처리를 연기할 뿐입니다.

작업 일괄 처리에 등록하려면 다음 코드를 사용하여 작업 항목을 현재 작업 일괄 처리에 추가합니다.

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

샘플 세부 정보

이 샘플은 자금 이체 시나리오입니다. 보통 예금 계좌에서 당좌 예금 계좌로 일정 금액을 이체해야 하는 경우입니다. 워크플로에서 먼저 해당 금액을 당좌 예금 계좌의 대변에 기입합니다. 그런 다음 이 금액을 보통 예금 계좌의 차변에 기입합니다. 보통 예금 계좌 잔고가 이체액보다 적으면 트랜잭션이 중단되고 당좌 예금 계좌가 복원됩니다. 반대로 잔고가 이체액보다 많으면 트랜잭션이 성공합니다.

데이터베이스도 동일한 트랜잭션에 참여하도록 커밋 메서드 도중에 트랜잭션 컨텍스트가 데이터베이스 호출에 전달됩니다.

이 샘플에는 다음과 같이 세 개의 사용자 지정 활동이 있습니다.

CreditAmount - 금액을 당좌 예금 계좌 대변에 기입할 때 사용합니다.

DebitAmount - 금액을 보통 예금 계좌 차변에 기입할 때 사용합니다.

TransactionComposite - SequenceActivity 활동에서 상속되는 복합 활동으로서, 트랜잭션 동작을 제공합니다.

SQL Server 데이터베이스를 만들고 구성하려면

  1. Microsoft SQL Server 2005 Express, SQL Server 2000 이상 버전 또는 MSDE(SQL Server 2000 Desktop Engine)에서 다음과 같은 SQL 쿼리문을 사용하여 이름이 SqlPersistenceService인 새 데이터베이스를 만듭니다.

    CREATE DATABASE SqlPersistenceService

    참고   워크플로 응용 프로그램에서 SqlTrackingServiceSqlWorkflowPersistenceService를 모두 사용할 경우 유지와 추적 모두에 단일 데이터베이스를 사용하는 것이 좋습니다.

  2. SQL 쿼리 분석기 작업 영역의 사용 가능한 데이터베이스 목록에서 1단계에서 만든 데이터베이스를 선택합니다.

  3. 파일 메뉴에서 열기를 클릭하고 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistenceService_Schema.sql을 엽니다. 여기서 <framework_version>은 현재 컴퓨터에 설치되어 있는 .NET Framework 버전입니다.

  4. 실행을 클릭하거나 F5 키를 눌러 쿼리를 실행하여 SQL 유지 서비스 표를 만듭니다.

  5. 파일 메뉴에서 열기를 클릭하고 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistenceService_Logic.sql을 엽니다. 여기서 <framework_version>은 현재 컴퓨터에 설치되어 있는 .NET Framework 버전입니다.

  6. 실행을 클릭하거나 F5 키를 눌러 쿼리를 실행하여 SQL 유지 서비스 저장 프로시저를 만듭니다.

이 샘플을 빌드하고 실행하려면

  1. 샘플 다운로드를 클릭하여 샘플을 다운로드합니다.

    이렇게 하면 샘플 프로젝트가 로컬 하드 디스크에 추출됩니다.

  2. .\SQL\TransactionServiceDB.cmd 파일에 제공된 데이터베이스용 스크립트를 실행하여 TransactionServiceSampleDB 데이터베이스를 만듭니다.

    참고

    이 스크립트는 TransactionServiceSampleDB라는 데이터베이스를 만듭니다. 샘플에 사용된 연결 문자열은 이 데이터베이스 이름을 사용합니다.

    참고

    데이터베이스의 이름을 변경하는 경우 소스 코드에서 정확한 연결 문자열을 업데이트해야 합니다. 그렇지 않으면 샘플을 데이터베이스에 연결할 수 없습니다. 그리고 스크립트를 실행하기 전에 정확한 SQL 서버 설치 위치를 스크립트 20행에 지정했는지 확인합니다.

  3. 시작을 클릭하고 프로그램, Microsoft Windows SDK를 차례로 가리킨 다음 CMD 셸을 클릭합니다.

  4. 샘플의 소스 디렉터리로 이동합니다.

  5. 명령 프롬프트에서 **MSBUILD <Solution file name>**을 입력합니다.

  6. SDK 명령 프롬프트에서 샘플의 소스 폴더 아래에 있는 Host\bin\debug 폴더 또는 Host\bin 폴더(VB 버전의 샘플의 경우)의 .exe 파일을 실행합니다.

  7. 샘플을 디버깅하려면 SampleWorkflow 프로젝트를 시작 프로젝트로 만듭니다. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 시작 프로젝트로 설정을 선택하면 됩니다.

  8. SampleWorkflow 프로젝트의 속성 대화 상자를 엽니다.

  9. 시작 외부 프로그램을 선택하고 Host\bin\Debug 폴더에서 host.exe 파일을 선택합니다.

    Host.exe 파일을 실행하면 보통 예금 계좌에서 당좌 예금 계좌로 이체할 금액을 입력해야 합니다. 0이 아닌 양수 금액을 입력합니다. 보통 예금 계좌의 잔고에 따라 트랜잭션이 성공하거나 실패합니다. 그 결과에 따라 해당 화면이 표시됩니다.

참고 항목

참조

Commit
Add
WorkflowCommitWorkBatchService

기타 리소스

Windows Workflow CommitWorkBatch Services
Using Transactions in Workflows

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.