다음을 통해 공유


SqlWorkflowPersistenceService 사용

SqlWorkflowPersistenceService 클래스는 제대로 작동하는 유지 서비스를 나타냅니다. 기본적으로 제공되는 이 서비스를 사용하여 워크플로 런타임 엔진에서 요청할 때 워크플로 인스턴스에 대한 워크플로 상태 정보를 유지하고 검색할 수 있습니다.

SqlWorkflowPersistenceService 서비스는 WorkflowCommitWorkBatchService에서 제공하는 워크플로 트랜잭션 일괄 처리 기능에 참여합니다. 즉, 보류 중인 SQL 데이터베이스에 쓰기를 나타내는 개체를 현재 일괄 처리에 추가하고 IPendingWork 인터페이스를 구현합니다.

SqlWorkflowPersistenceService 클래스의 기본 구현은 서로 다른 프로세스로 실행 중인 유지 서비스가 단일 데이터 저장소에 액세스할 수 있는 환경에서 사용할 해당 데이터베이스의 워크플로 상태 정보에 대한 액세스 잠금을 구현합니다. 특정 워크플로 런타임에서 사용 중인 워크플로 인스턴스를 잠긴 것으로 표시하기 위해 SQL 데이터베이스 스키마의 열 하나가 사용됩니다. 미리 정의된 비활성 기간이 지나면 워크플로 런타임에서 이 잠금을 해제합니다. 이 비활성 기간은 SqlWorkflowPersistenceService 클래스의 생성자에 정의됩니다. 이 기능은 이미 다른 워크플로 런타임에서 로드한 워크플로 인스턴스를 또 다른 워크플로 런타임에서 액세스하는 상황을 처리하기 위해 제공됩니다. 다른 런타임에서 로드한 워크플로를 로드하려고 시도하는 런타임에서는 WorkflowOwnershipException이 발생합니다.

참고

instanceOwnershipDuration 매개 변수가 없는 SqlWorkflowPersistenceService의 생성자가 사용될 경우 잠금이 구현되지 않습니다. 이 매개 변수에 값(TimeSpan.MaxValue 값 포함)이 지정되면 잠금이 사용됩니다.

일반적인 잠금 및 유지 서비스에 대한 자세한 내용은 Windows Workflow 유지 서비스를 참조하십시오.

워크플로 상태와 관련하여 SqlWorkflowPersistenceService에서 관리하는 또 다른 요소는 타이머 시간 범위입니다. 이 정보는 워크플로 정의 내에서 DelayActivity 활동을 사용하여 구성됩니다. SqlWorkflowPersistenceService에서 워크플로를 처음 로드하면 모든 타이머 구성이 워크플로 런타임에 등록됩니다. 워크플로 인스턴스별로 처리가 필요한 시간 이벤트가 있는지 확인하기 위해 SqlWorkflowPersistenceService에 정의된 LoadingInterval 속성을 사용하여 워크플로 인스턴스가 검사됩니다.

참고

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

Microsoft Distributed Transaction Coordinator용으로 TCP 포트 135 열기

워크플로를 원격 SQL 서버에 유지하려면 SqlWorkflowPersistenceService 서비스를 사용하기 전에 Windows 방화벽에서 MSDTC(Microsoft Distributed Transaction Center)용으로 TCP 포트 135를 열어 두었는지 확인해야 합니다. 이 포트를 열려면 다음 단계를 수행합니다.

Windows 방화벽을 사용하여 TCP 포트 135를 열려면

  1. 시작을 클릭한 다음 제어판을 클릭합니다.

  2. Windows 방화벽을 엽니다.

  3. 예외 탭을 클릭합니다.

  4. 프로그램 추가를 클릭합니다.

  5. 찾아보기 대화 상자에 \WINDOWS\system32\msdtc.exe라고 입력합니다.

  6. 열기를 클릭한 다음 확인을 클릭합니다.

  7. 포트 추가를 클릭합니다.

  8. 이 포트 열기의 이름을 입력하고 포트 번호 필드에 135라고 입력합니다.

  9. TCP를 선택한 다음 확인을 클릭합니다.

SQL 유지 데이터베이스 만들기

Windows Workflow Foundation 설치 프로그램은 SqlWorkflowPersistenceService 서비스에 필요한 데이터베이스를 설치하지 않지만, 이러한 서비스에 대한 데이터베이스를 만들고 구성할 수 있는 SQL 스크립트를 설치합니다. 이 단원에서는 SqlWorkflowPersistenceService 서비스에서 사용하는 SQL Server 데이터베이스를 올바르게 구성하는 단계를 설명합니다.

Windows Workflow Foundation에서 설치하는 SQL 서비스는 SQL Server를 사용하여 정보를 저장합니다. 이러한 작업에 Microsoft SQL Server 2005 Express, SQL Server 2000 이상 버전 또는 SQL Server 2000 Desktop Engine(MSDE)을 사용할 수 있습니다.

SQL 유지 데이터베이스를 만들려면

  1. SQL Server 2005 Express, SQL Server 2000 이상 버전 또는 MSDE에서 다음과 같은 SQL 쿼리문을 사용하여 WorkflowPersistenceStore라는 새 데이터베이스를 만듭니다.

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

  3. 파일 메뉴에서 열기를 클릭한 다음 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistence_Schema를 엽니다.

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

  5. 파일 메뉴에서 열기를 클릭한 다음 SQL 스크립트 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<language>\SqlPersistence_Logic을 엽니다.

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

런타임 엔진에 SqlWorkflowPersistenceService 추가

Windows Workflow Foundation 런타임 엔진에 프로그래밍 방식으로 또는 응용 프로그램 구성 파일을 사용하여 런타임 서비스를 추가할 수 있습니다.

SqlWorkflowPersistenceService에 대한 app.config를 수정하려면

  1. app.config 파일의 Services 요소에 add라는 새 요소를 만듭니다.

  2. System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 값을 가진 add 요소에 type이라는 특성을 추가합니다.

  3. Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI 값을 가진 add 요소에 connectionString이라는 특성을 추가합니다.

참고

SQL Server의 구성에 따라 연결 문자열을 수정해야 할 수 있습니다. 다음 예제의 연결 문자열에서는 데이터베이스 이름이 WorkflowPersistenceStore이고 SQL Server가 응용 프로그램 개발에 사용 중인 시스템에 설치되어 있다고 가정합니다.

  1. SqlWorkflowPersistenceService 클래스에 정의된 구성 가능 속성에 해당하는 특성을 추가하여 SqlWorkflowPersistenceService 서비스를 구성합니다.

    예를 들어, DelayActivity 활동을 사용하는 경우처럼 워크플로가 유휴 상태가 되면 언로드하도록 지정하려면 UnloadOnIdle이라는 특성을 add 요소에 추가하고 true 값을 지정합니다.

    <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;" UnloadOnIdle="true"/>
    

런타임 엔진에 프로그래밍 방식으로 SqlWorkflowPersistenceService 추가

  1. WorkflowRuntime 클래스에 정의된 AddService 메서드를 호출하여 SqlWorkflowPersistenceService의 새 인스턴스를 전달합니다.

    다음 예제에서는 이전 절차의 예제와 동일한 구성을 사용하여 SqlWorkflowPersistenceService 서비스를 만드는 방법을 보여 줍니다. 이 예제에서는 instanceOwnershipDuration이 TimeSpan.MaxValue로 설정되고, loadingInterval이 2분으로 설정됩니다. 이 값은 SqlWorkflowPersistenceService 클래스에 사용되는 기본값입니다.

  2. [C#]

using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
    // Create the SqlWorkflowPersistenceService.
    string connectionString = ="Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI;"
    bool unloadOnIdle = true;
    TimeSpan instanceOwnershipDuration = TimeSpan.MaxValue;
    TimeSpan loadingInterval = new TimeSpan(0, 2, 0);
    SqlWorkflowPersistenceService persistService = new SqlWorkflowPersistenceService(connectionString, unloadOnIdle, instanceOwnershipDuration, loadingInterval);
   
    // Add the SqlWorkflowPersistenceService to the runtime engine.
    workflowRuntime.AddService( persistService );
    
    // ...
}

참고 항목

작업

작업 3: Windows Workflow 유지 서비스 사용

참조

SqlWorkflowPersistenceService

개념

Windows Workflow 유지 서비스

기타 리소스

Persistence Host Sample
Using Persistence Services Sample
Custom Persistence Service Sample

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.