작업 3: Windows Workflow 유지 서비스 사용
이 작업에서는 응용 프로그램에서 SqlWorkflowPersistenceService 서비스를 사용하는 방법을 알아봅니다. DelayActivity 활동이 실행될 때 어셈블리가 잠시 동안 유휴 상태인 경우 Windows Workflow Foundation에서는 워크플로가 다시 시작될 때까지 워크플로를 저장소에 저장할 수 있습니다.
SqlWorkflowPersistenceService 서비스는 SQL Server 데이터베이스를 사용하여 언로드라는 프로세스를 통해 워크플로의 현재 상태를 저장합니다. 워크플로가 다시 시작될 준비가 되면 SqlWorkflowPersistenceService 서비스가 Windows Workflow Foundation 런타임 엔진에 알리고 워크플로가 로드된 다음 실행이 다시 시작됩니다.
참고
Windows Workflow Foundation으로 설치되는 SQL 서비스는 Microsoft SQL Server를 사용하여 정보를 저장합니다. 이러한 작업에 Microsoft SQL Server 2005 Express, Microsoft SQL Server 2000 이상 버전 또는 Microsoft SQL Server 2000 Desktop Engine(MSDE)을 사용할 수 있습니다.
참고
Windows Workflow Foundation 설치 프로그램은 이러한 서비스에 필요한 데이터베이스를 설치하지 않지만, 이러한 서비스에 대한 데이터베이스를 만들고 구성하기 위한 SQL 스크립트를 설치합니다.
참고
이 작업을 수행하려면 App.config 파일이 있어야 합니다. 작업 2: App.Config를 사용하여 런타임 서비스 구성의 단계를 수행하지 않은 경우 계속하기 전에 App.config 파일을 만들어야 합니다.
참고
이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.
SQL 유지 데이터베이스를 만들려면
Microsoft SQL Server 2005 Express, Microsoft SQL Server 2000 이상 버전 또는 Microsoft SQL Server 2000 Desktop Engine(MSDE)에서 다음과 같은 SQL 쿼리문을 사용하여 WorkflowPersistenceStore라는 새 데이터베이스를 만듭니다.
CREATE DATABASE WorkflowPersistenceStore
SQL 쿼리 분석기 작업 영역의 사용 가능한 데이터베이스 목록에서 1단계에서 만든 데이터베이스를 선택합니다.
파일 메뉴에서 열기를 클릭한 다음 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistence_Schema를 엽니다.
실행을 클릭하여 쿼리를 실행하거나 F5 키를 눌러 SQL 유지 서비스 테이블을 만듭니다.
파일 메뉴에서 열기를 클릭한 다음 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistence_Logic을 엽니다.
실행을 클릭하여 쿼리를 실행하거나 F5 키를 눌러 SQL 유지 서비스 저장 프로시저를 만듭니다.
SqlWorkflowPersistenceService에 대한 App.config를 수정하려면
App.config 파일의 Services 요소에서 add라는 새 요소를 만듭니다.
type이라는 특성을 System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 값이 있는 add 요소에 추가합니다.
connectionString이라는 특성을 Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI; 값이 있는 add 요소에 추가합니다.
LoadIntervalSeconds라는 특성을 5 값이 있는 add 요소에 추가합니다.
<add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionString="Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI;" LoadIntervalSeconds="5"/>
추가 워크플로 이벤트 처리기를 만들려면
Program 클래스의 Main 메서드에서 WorkflowLoaded 이벤트에 대한 새 이벤트 처리기를 추가합니다.
workflowRuntime.WorkflowLoaded += new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowLoaded);
Program 클래스의 Main 메서드에서 WorkflowIdled 이벤트에 대한 새 이벤트 처리기를 추가합니다.
workflowRuntime.WorkflowIdled += new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowIdled);
Program 클래스의 Main 메서드에서 WorkflowPersisted 이벤트에 대한 새 이벤트 처리기를 추가합니다.
workflowRuntime.WorkflowPersisted += new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowPersisted);
Program 클래스의 Main 메서드에서 WorkflowUnloaded 이벤트에 대한 새 이벤트 처리기를 추가합니다.
workflowRuntime.WorkflowUnloaded += new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowUnloaded);
workflowRuntime_WorkflowLoaded라는 새 정적 메서드를 만듭니다.
메서드 본문에서 WriteLine 메서드를 사용하여 정보 메시지를 표시합니다.
static void workflowRuntime_WorkflowLoaded(object sender, WorkflowEventArgs e) { Console.WriteLine("Workflow {0} loaded", e.WorkflowInstance.InstanceId); }
workflowRuntime_WorkflowIdled라는 새 정적 메서드를 만듭니다.
메서드 본문에서 WriteLine 메서드를 사용하여 정보 메시지를 표시합니다.
WorkflowEventArgs 매개 변수의 WorkflowInstance 개체에 정의된 Unload 메서드를 호출합니다.
참고
워크플로가 유휴 상태가 될 때 WorkflowInstance를 언로드하기 위해 여기에서 설명하는 메서드를 통해 워크플로가 유지되기 전에 응용 프로그램 관련 논리를 수행할 수 있습니다. 이러한 기능이 필요하지 않으면 응용 프로그램의 App.config 파일에 있는 SqlWorkflowPersistenceService 요소에 UnloadOnIdle이라는 특성을 추가하고 이 특성을 true로 설정합니다.
static void workflowRuntime_WorkflowIdled(object sender, WorkflowEventArgs e) { Console.WriteLine("Workflow {0} idled", e.WorkflowInstance.InstanceId); e.WorkflowInstance.Unload(); }
workflowRuntime_WorkflowPersisted라는 새 정적 메서드를 만듭니다.
메서드 본문에서 WriteLine 메서드를 사용하여 정보 메시지를 표시합니다.
static void workflowRuntime_WorkflowPersisted(object sender, WorkflowEventArgs e) { Console.WriteLine("Workflow {0} persisted", e.WorkflowInstance.InstanceId); }
workflowRuntime_WorkflowUnloaded라는 새 정적 메서드를 만듭니다.
메서드 본문에서 WriteLine 메서드를 사용하여 정보 메시지를 표시합니다.
static void workflowRuntime_WorkflowUnloaded(object sender, WorkflowEventArgs e) { Console.WriteLine("Workflow {0} unloaded", e.WorkflowInstance.InstanceId); }
workflowInstance라는 Object를 매개 변수로 사용하는 UnloadInstance라는 새 정적 메서드를 만듭니다.
UnloadInstance 메서드에서 workflowInstance 매개 변수를 WorkflowInstance 개체로 캐스팅하고 Unload 메서드를 호출하여 워크플로를 유지합니다.
static void UnloadInstance(object sender, WorkflowEventArgs e) { Console.WriteLine("Workflow {0} unloaded", e.WorkflowInstance.InstanceId); e.WorkflowInstance.Unload(); }
프로젝트를 빌드하고 응용 프로그램을 실행합니다.
출력은 다음 그림과 유사합니다.
코드 컴파일
코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.
작업 4: Windows Workflow 추적 서비스 사용에서는 SqlTrackingService를 사용하여 워크플로 인스턴스와 워크플로 실행 중에 발생하는 활동 이벤트를 추적하는 방법을 살펴봅니다.
참고 항목
작업
작업 4: Windows Workflow 추적 서비스 사용
참조
개념
기타 리소스
Using Persistence Services
Custom Persistence Service
Copyright © 2007 by Microsoft Corporation. All rights reserved.