인스턴스 쿼리 및 컨트롤

이 샘플에서는 지속성 저장소 쿼리와 제어 공급자를 사용하는 방법을 보여 줍니다. 쿼리 공급자는 사용자가 지속성 저장소에 저장된 인스턴스를 쿼리할 수 있도록 하는 C# API를 노출합니다. 제어 공급자는 사용자가 지속성 저장소에 저장된 인스턴스에 대해 제어 명령(Suspend, Resume, Cancel, Terminate 및 Delete)을 실행할 수 있도록 하는 C# API를 노출합니다.

이 샘플에는 WF 테스트 서비스, 인스턴스를 쿼리하기 위한 Windows 콘솔 응용 프로그램 및 인스턴스를 제어하기 위한 Windows 콘솔 응용 프로그램이 포함되어 있습니다.

참고

샘플은 교육용으로만 제공됩니다. 프로덕션 환경에서 사용하도록 작성된 것은 아니며 프로덕션 환경에서 테스트되지 않았습니다. Microsoft는 이러한 샘플에 대한 기술 지원을 제공하지 않습니다.

사전 요구 사항

  • IIS(인터넷 정보 서비스) 버전 7.0

  • 초기화된 지속성 저장소

  • 동일한 컴퓨터에 설치된 Visual Studio 2010 및 Windows Server AppFabric

샘플 위치 및 파일

추가 정보 문서는 <samples>\Samples\Hosting\InstanceQueryAndControl에 있습니다.

이 샘플을 실행하는 데 필요한 모든 파일은 <samples>\Samples\Hosting\InstanceQueryAndControl에 있으며 다음과 같습니다.

  • InstanceControl 폴더에는 인스턴스 제어 샘플 응용 프로그램에 필요한 모든 파일이 들어 있습니다.

  • InstanceQuery 폴더에는 인스턴스 쿼리 샘플 응용 프로그램에 필요한 모든 파일이 들어 있습니다.

  • TestWorkflow 폴더에는 샘플 워크플로에 필요한 모든 파일이 들어 있습니다.

  • 솔루션 파일 InstanceQueryAndControl.sln에서는 모든 샘플 아티팩트를 빌드하는 솔루션을 정의합니다.

이 샘플 설정 및 실행

  1. Windows Server AppFabric을 설치하는 동안 지속성 저장소를 만들지 않은 경우 지금 만듭니다.

    1. 관리자 권한으로 C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.Configuration.exe를 실행합니다. 작업자 구성 단계에서 지속성 구성 설정 확인란을 선택합니다. 지속성 공급자로 sqlStoreProvider를 선택한 다음 구성을 클릭합니다.

    2. 지속성 SQL 저장소 구성 창에서 루트 web.config에 지속성 저장소 등록 추가지속성 저장소 초기화를 선택합니다. 지속성 저장소 데이터베이스의 이름을 ApplicationServerWorkflowInstanceStore로 지정합니다. 확인을 클릭하여 지정된 이름으로 지속성 저장소 데이터베이스를 만듭니다. 다른 데이터베이스 이름을 선택하는 경우 샘플 코드를 변경해야 합니다(아래 참조).

  2. 64비트 시스템에서 이 샘플을 실행하는 경우 C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.StoreManagement.dll 파일을 프로젝트 폴더에 복사합니다.

    참고

    이 경로는 3단계에서 사용됩니다.

  3. 솔루션을 빌드합니다.

    1. 관리자 권한으로 Visual Studio 2010을 엽니다. 시작 --> 모든 프로그램 --> Microsoft Visual Studio 2010을 클릭합니다. Microsoft Visual Studio 2010을 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택합니다.

    2. 샘플 프로젝트를 엽니다. Visual Studio에서 파일 --> 열기 --> 프로젝트/솔루션을 클릭합니다. 샘플 솔루션 파일 <samples>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln을 선택합니다. 파일을 열 때 Visual Studio에서 샘플 서비스에 대한 로컬 IIS URL이 아직 만들어지지 않았다고 경고합니다. 새 가상 디렉터리를 만들도록 확인합니다.

    3. 64비트 시스템에서 이 샘플을 실행하는 경우 InstanceQuery 및 the InstanceControl 프로젝트에 대해 다음 단계를 실행합니다. Program.cs 파일의 줄 17에서 Microsoft.ApplicationServer.StoreManagement.dll 파일의 경로를 2단계에서 파일을 복사한 위치로 변경합니다.

    4. 이 샘플에서는 SQL Express에서 호스트하는 지속성 데이터베이스 ApplicationServerWorkflowInstanceStore에서 워크플로가 지속된다고 가정합니다. 데이터베이스 이름과 SQL Server 인스턴스는 InstanceControl 프로젝트의 Program.cs에 있는 줄 44 및 45와 InstanceQuery 프로젝트의 Program.cs에 있는 줄 37 및 38에서 변경할 수 있습니다.

    5. F6 키를 눌러 솔루션을 빌드합니다. 이렇게 하면 TestWorkflow 응용 프로그램이 IIS에 자동으로 배포됩니다.

  4. TestWorkflow 응용 프로그램을 구성합니다.

    1. IIS 관리자를 엽니다. 시작 --> 제어판 --> 관리 도구 --> IIS(인터넷 정보 서비스) 관리자를 클릭합니다.

    2. 올바른 AppPool을 설정하고 사이트에 대해 net.pipe 프로토콜을 사용하도록 설정합니다.

      • IIS 연결 창에서 <컴퓨터>/사이트/기본 웹 사이트 노드를 선택합니다.

      • IIS 작업 창에서 고급 설정을 클릭합니다.

      • 응용 프로그램 풀 설정을 ASP.NET v4.0으로 변경합니다.

      • 사용할 수 있는 프로토콜http,net.pipe로 변경합니다. 주의: 쉼표와 net.pipe 사이에 공백이 없어야 합니다.

      • 확인을 클릭합니다.

    3. 올바른 AppPool을 설정하고 응용 프로그램에 대해 net.pipe 프로토콜을 사용하도록 설정합니다.

      • IIS 연결 창에서 <컴퓨터>/사이트/기본 웹 사이트/TestWorkflow 노드를 선택합니다.

      • IIS 작업 창에서 고급 설정을 클릭합니다.

      • 응용 프로그램 풀 설정을 ASP.NET v4.0으로 변경합니다.

      • 사용할 수 있는 프로토콜http,net.pipe로 변경합니다. 주의: 쉼표와 net.pipe 사이에 공백이 없어야 합니다.

      • 확인을 클릭합니다.

  5. TestService의 인스턴스를 만듭니다.

    1. WCF 테스트 클라이언트를 엽니다.

      • IIS 관리자 연결 창에서 <컴퓨터>/사이트/기본 웹 사이트/TestWorkflow 노드를 선택합니다.

      • TestWorkflow를 마우스 오른쪽 단추로 클릭하고 콘텐츠 보기로 전환을 선택합니다.

      • TestService.xamlx를 마우스 오른쪽 단추로 클릭하고 찾아보기를 선택합니다. 웹 브라우저가 시작되고 TestService의 시작 페이지를 표시합니다.

      • WCF 테스트 클라이언트를 엽니다. WCF 테스트 클라이언트를 열려면 **시작 --> 모든 프로그램 --> Microsoft Visual Studio 2010 --> Visual Studio Tools --> Visual Studio 명령 프롬프트(2010)**를 클릭한 다음 명령 프롬프트에서 wcftestclient 명령을 실행합니다.

      • 웹 브라우저의 URL 창에서 TestService의 URL(예: "https://localhost/TestWorkflow/TestService.xamlx")을 복사합니다. WCF 테스트 클라이언트에서 내 서비스 프로젝트를 마우스 오른쪽 단추로 클릭하고 서비스 추가를 선택합니다. 끝점 주소를 묻는 메시지가 표시되면 TestService의 URL을 붙여 넣습니다.

    2. 다음과 같이 TestService를 호출합니다.

      • WCF 테스트 클라이언트 창에서 IService (BasicHttpBinding_IService) 노드 아래의 Invoke() 노드를 두 번 클릭합니다.

      • 호출 탭의 열에서 (null) 필드를 클릭합니다. **(null)**에서 **System.Nullable<System.Int32>**로 선택을 변경합니다. 이제 이름 열에서 int 노드를 확장합니다. 값이 0인 새 행이 나타납니다.

      • 호출을 클릭합니다. 이렇게 하면 10분 동안 실행되는 TestService 인스턴스가 만들어집니다.

      • 값을 1로 변경하고 호출을 클릭합니다. 이렇게 하면 즉시 완료되는 TestService 인스턴스가 만들어집니다.

      • 값을 2로 변경하고 호출을 클릭합니다. 이렇게 하면 예외를 발생시키고 일시 중단되는 TestService 인스턴스가 만들어집니다.

  6. 인스턴스를 쿼리합니다.

    1. Visual Studio에서 InstanceQuery가 기본 시작 프로젝트인지 확인한 다음 F5 키를 눌러 인스턴스를 쿼리합니다. 콘솔 창이 열리고 5.b 단계에서 만든 세 개의 인스턴스를 표시합니다.

    2. 또는 명령 프롬프트에서 다음과 같이 InstanceQuery 명령을 실행합니다.

      • 명령 프롬프트를 엽니다. <samples>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group] 명령을 실행합니다.
  7. 인스턴스를 제어합니다.

    1. 명령 프롬프트에서 <<samples>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete] 명령을 실행합니다. 이전에 만든 인스턴스 중 하나의 20자 인스턴스 ID GUID를 사용합니다.

이 샘플 제거

  1. 지속성 저장소에서 TestWorkflow 서비스의 모든 서비스 인스턴스를 삭제합니다. 관리 콘솔 창을 열고 다음과 같은 명령을 실행합니다.

    > powershell
    > import-module applicationServer
    > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
    

설명

이 샘플에는 다음 세 개의 프로젝트가 포함되어 있습니다.

  • TestWorkflow는 WF 서비스를 구현합니다. 서비스는 IIS에서 호스트됩니다. 서비스를 호출할 때마다 새 서비스 인스턴스가 만들어집니다. WCF 테스트 클라이언트를 통해 서비스를 호출하는 경우 사용자가 매개 변수를 서비스로 전달합니다. 인스턴스는 매개 변수에 따라 10분 동안 실행되거나, 즉시 완료되거나, 예외를 발생시킵니다.

  • InstanceQuery는 지속성 저장소에 대해 쿼리를 실행하고 그 결과를 화면에 인쇄하는 콘솔 응용 프로그램을 구현합니다. 사용자는 쿼리 유형, 쿼리 매개 변수 및 지속성 저장소의 연결 문자열을 지정해야 합니다.

  • InstanceControl은 지속성 저장소에 있는 인스턴스에 대해 제어 명령을 실행하는 콘솔 응용 프로그램을 구현합니다. 사용자는 명령 유형, 인스턴스 ID 및 지속성 저장소의 연결 문자열을 지정해야 합니다.

인스턴스 쿼리 샘플 응용 프로그램

인스턴스 쿼리 샘플 응용 프로그램은 AppFabric 쿼리 공급자의 기능과 API를 보여 줍니다. 쿼리 공급자를 통해 사용자는 다음 세 유형의 쿼리를 실행할 수 있습니다.

  • 지속성 저장소에 있고 해당 속성이 쿼리와 일치하는 인스턴스 목록을 가져옵니다. 이 쿼리는 instanceInfo의 배열을 반환합니다.

  • 지속성 저장소에 있고 해당 속성이 쿼리와 일치하는 인스턴스 수를 가져옵니다. 이 쿼리는 Int32를 반환합니다.

  • 지속성 저장소에 있고 해당 속성이 쿼리와 일치하는 인스턴스 수를 가져오고 정의된 범주에 따라 그룹화합니다. 이 쿼리는 groupingResult 유형의 열거 가능한 값을 반환합니다.

각 쿼리 유형에 대해 쿼리 공급자는 쿼리를 실행하는 비동기 API를 제공합니다. 입력 및 반환 형식은 쿼리 유형에 따라 달라집니다. 사용자는 모든 쿼리 유형에 대해 쿼리 필터 집합을 지정할 수 있습니다. 이 샘플에서는 모든 쿼리 필터를 null로 설정하므로 쿼리가 저장소에 있는 모든 인스턴스를 선택합니다. 사용자는 쿼리 필터 매개 변수 외에도 지속성 저장소의 연결 문자열을 제공해야 합니다. 샘플에서는 인스턴스가 DefaultSqlWorkflowInstanceStore에 있다고 가정합니다. 또한 데이터베이스가 Windows 통합 인증을 사용하여 데이터베이스 액세스를 인증한다고 가정합니다.

인스턴스 목록을 요청하는 경우 사용자가 반환되는 최대 인스턴스 수와 인스턴스 정렬 방법을 지정해야 합니다. 현재 쿼리 공급자는 LastUpdatedTime을 기준으로 정렬하거나 정렬되지 않은 목록을 반환하는 옵션만 제공합니다.

그룹화된 인스턴스 수를 요청하는 경우에는 사용자가 그룹화 매개 변수를 지정해야 합니다. 이러한 매개 변수는 List<GroupingMode>로 제공됩니다. 첫 번째 요소는 기본 그룹을 정의하고 이후의 각 요소는 하위 그룹을 정의합니다.

인스턴스 제어 샘플 응용 프로그램

인스턴스 제어 샘플 응용 프로그램은 AppFabric 제어 공급자의 기능과 API를 보여 줍니다. 제어 공급자를 통해 사용자는 인스턴스에 대해 Suspend, Resume, Cancel, Terminate 또는 Delete 명령을 실행할 수 있습니다. 사용자는 명령 유형과 인스턴스 ID 외에도 서비스 식별자 SiteName, RelativeApplicationPath 및 VirtualPath를 제공해야 합니다. 이러한 매개 변수는 WMS에서 서비스 인스턴스의 제어 끝점을 계산하는 데 필요합니다. 서비스 식별자는 Suspend, Resume, Cancel 및 Terminate에만 필요합니다. Delete 명령은 제어 끝점에 대해 실행되지 않고 데이터베이스에서 직접 실행됩니다.

사용자는 쿼리 필터 매개 변수 외에도 지속성 저장소의 연결 문자열을 제공해야 합니다. 샘플에서는 인스턴스가 DefaultSqlWorkflowInstanceStore에 있다고 가정합니다. 또한 데이터베이스가 Windows 통합 인증을 사용하여 데이터베이스 액세스를 인증한다고 가정합니다.

인스턴스 제어 샘플 응용 프로그램은 Suspend, Resume, Cancel 또는 Terminate 명령을 지속성 저장소의 명령 큐에 삽입합니다. 명령은 이후 시점에 실행됩니다. 인스턴스 쿼리 샘플 응용 프로그램을 사용하여 명령이 실행되었는지 여부와 시기를 확인할 수 있습니다.

인스턴스에 대해 큐에 삽입된 다른 보류 중인 명령이 없는 경우에만 해당 인스턴스에 대한 명령을 큐에 삽입할 수 있습니다.

다음 표에서는 다양한 상태의 인스턴스에 대해 실행할 경우 명령이 미치는 영향에 대해 설명합니다.

현재 상태 일시 중단 다시 시작 취소 종료 삭제

실행 중

인스턴스 일시 중단

작업 없음

인스턴스 취소

인스턴스 종료

지속성 저장소에서 인스턴스 제거

일시 중단

작업 없음

인스턴스 다시 시작

인스턴스 취소

인스턴스 종료

지속성 저장소에서 인스턴스 제거

완료

허용되지 않음

허용되지 않음

허용되지 않음

허용되지 않음

지속성 저장소에서 인스턴스 제거

경고

지속성 저장소에서 실행 중인 인스턴스를 제거하면 예기치 못한 동작이 발생할 수 있습니다. 이는 권장되지 않습니다.

  2011-12-05