다음을 통해 공유


작업 2: 영속 서비스의 지속성 사용

이 작업에서는 작업을 성공적으로 호출할 때마다 서비스의 상태를 유지할 수 있도록 하는 특성으로 작업 1에서 만든 서비스를 데코레이트합니다.

영속 서비스 특성으로 서비스를 데코레이트하려면

  1. Service1.cs(또는 Visual Basic 솔루션을 만든 경우 Service1.vb)를 엽니다.

  2. 솔루션 탐색기 창의 SimpleDurableService 프로젝트 노드 아래에서 참조 하위 폴더를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

  3. 참조 추가 대화 상자의 .NET 탭에서 System.WorkflowServices를 선택하고 확인을 클릭합니다.

  4. C# 소스 파일에서 다음 using 문을 추가합니다.

Visual Basic 솔루션을 만든 경우 SimpleDurableService 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 참조 탭을 선택하고 가져온 네임스페이스 아래에서 System.ServiceModel.Description을 선택합니다.

  1. 서비스를 유지하려면 다음 예제와 같이 Service1 클래스를 DurableServiceAttributeSerializableAttribute 특성으로 데코레이트해야 합니다.

  2. DurableServiceAttribute 특성은 WCF 서비스의 상태 정보를 데이터베이스나 파일과 같은 상태 유지 저장소에 유지할 수 있도록 지정합니다. 또한 서비스 유형은 상태 유지 저장소에 전송될 수 있도록 serialize될 수 있어야 합니다.

  3. 다음 예제와 같이 서비스 작업을 DurableOperationAttribute 특성으로 데코레이트합니다. 이 특성은 작업이 완료된 후 서비스 인스턴스 상태가 저장되도록 지정합니다.

CanCreateInstanceCompletesInstance 속성은 데코레이트된 작업이 성공적으로 완료된 후 영속 서비스를 만들거나 완료하도록 지정합니다. 이 자습서에서는 몇 가지 작업에 서비스 인스턴스의 동작을 제어하는 첫 번째 및 마지막 작업이 있습니다.

기본값으로 설정된 DurableOperationAttribute 특성으로 데코레이트된 작업은 지속성 저장소의 기존 서비스 인스턴스 항목에 상태 정보만 유지할 수 있습니다. 그러나 System.ServiceModel.SessionMode.NotAllowedtrue로 설정된 서비스 계약을 만드는 경우 모든 DurableOperationAttribute 특성의 CanCreateInstance 속성을 true로 설정해야 합니다.

이제 서비스를 적절한 특성으로 데코레이트했으므로 구성 파일을 설정하고 사용할 지속성 저장소를 참조해야 합니다.

영속 서비스를 구성하려면

  1. App.config를 엽니다.

  2. WSHttpContextBinding과 같은 컨텍스트 바인딩을 참조하도록 끝점 구성 설정을 수정합니다.

    <endpoint address ="" binding="wsHttpContextBinding" contract="SimpleDurableService.IService1" />
    

    클라이언트에서 특정 서비스 인스턴스를 식별하는 데 DurableOperationContext를 사용하기 때문에 컨텍스트 바인딩을 사용해야 합니다. 클라이언트에서는 요청/응답 작업을 호출하고 서비스에서 응답을 받은 후 이후의 각 작업 호출에서 InstanceId 값을 사용하여 해당 호출을 올바른 서비스 인스턴스와 연결합니다. 이 추적 메커니즘을 사용하지 않은 경우 서비스 인스턴스가 종료되거나 클라이언트와 연결이 끊어지면 클라이언트에서 특정 서비스 인스턴스에 연결을 다시 설정할 수 없게 됩니다.

  3. 다음 자식 노드를 동작 노드에 추가합니다.

    <behaviors>
          <serviceBehaviors>
            <behavior name="SimpleDurableService.Service1Behavior">
              <!-- To avoid disclosing metadata information, 
              set the following value to false and remove the preceding metadata endpoint before deployment. -->
              <serviceMetadata httpGetEnabled="True"/>
              <!-- To receive exception details in faults for debugging purposes, 
              set the following value to true. Set the value to false before deployment 
              to avoid disclosing exception information. -->
              <serviceDebug includeExceptionDetailInFaults="False" />
              <persistenceProvider type="System.ServiceModel.Persistence.SqlPersistenceProviderFactory, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                                   connectionStringName="DurableServiceStore" 
                                   persistenceOperationTimeout = "00:00:10"
                                   lockTimeout="00:01:00"
                                   serializeAsText="true"/>
    
            </behavior>
          </serviceBehaviors>
        </behaviors>
    

    PersistenceProviderElement는 서비스에서 사용할 PersistenceProvider의 형식을 정의합니다. 이 자습서에서는 SqlPersistenceProviderFactory가 SQL 데이터베이스에 연결하는 PersistenceProvider 형식의 새 인스턴스를 만드는 데 사용됩니다. Add 작업이 호출되고 성공적으로 완료될 때마다 새 서비스 인스턴스가 만들어지고 상태 정보가 SQL 데이터베이스에 저장됩니다.

  4. 서비스 인스턴스에서 유지에 사용할 SQL 데이터베이스에 대한 연결 문자열을 추가합니다.

      </system.serviceModel>
      <connectionStrings>
        <add name="DurableServiceStore" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=NetFx35Samples_DurableServiceStore;Integrated Security=SSPI"/>
      </connectionStrings>
    </configuration>
    

참고

이 자습서에서는 Durable Workflow Services Sample에 사용된 동일한 데이터베이스를 사용하므로 연결 문자열도 동일합니다. 영속 저장소에 액세스할 수 있도록 하려면 One-Time Setup Procedure for the Windows Communication Foundation Samples에서 Createstores.cmd 스크립트를 실행합니다.

다음 작업에서는 영속 서비스에 액세스할 수 있는 클라이언트를 만듭니다.

참고 항목

작업

작업 1: 영속 서비스 계약 정의 및 구현
작업 3: 영속 서비스 클라이언트 만들기

기타 리소스

자습서: 영속 서비스 만들기

Copyright © 2007 by Microsoft Corporation. All rights reserved.