다음을 통해 공유


지속형 이중을 사용하는 상위-하위 워크플로 패턴

복잡한 장기 실행 프로세스에 대한 워크플로를 구현하는 일반적인 디자인 방법은 보다 작고 단순하고 다시 사용 가능한 워크플로로 격리시킬 수 있는 비즈니스 논리 부분을 식별한 다음 주 워크플로에서 실행을 조정하는 것입니다. 예를 들어, 구매 주문 처리의 경우 배송 논리를 워크플로(자식)로 정의할 수 있습니다. 이 워크플로는 필요한 경우 주 구매 주문 워크플로(부모)에서 다시 호출됩니다.

.NET Framework 4의 Windows Workflow Foundation에는 특정 장기 실행 워크플로를 다른 워크플로에서 "호출"하는 기본 제공 기능이 없습니다. 그러나 개발자가 이러한 동작을 수동으로 구성할 수 있도록 하는 많은 구현 옵션이 있습니다. 이 샘플에서는 사용 가능한 모든 옵션에 대해 설명하지는 않습니다. 대신, 특히 장기 실행 WCF 워크플로 서비스(XAMLX 워크플로)의 컨텍스트에서 "호출 워크플로" 패턴을 구현하는 가장 일반적인 방법 중 하나인 지속적 이중을 중심으로 설명합니다. 지속적 이중 패턴의 배경 개념은 단순합니다. 부모가 자식에서 노출하는 끝점을 호출하고 상관 관계에 사용되는 컨텍스트 토큰과 콜백 주소를 요청 메시지와 함께 전달합니다. 일정 시간 후에 자식이 완료되면 부모가 알 수 있도록 자식이 부모에 대해 콜백을 수행합니다.

지속형 이중을 수동으로 설정하는 방법에 대한 자세한 내용은 지속형 이중(https://go.microsoft.com/fwlink/?LinkId=196632)과 관련 WF 샘플 지속형 이중 샘플(https://go.microsoft.com/fwlink/?LinkId=194430) 및 How to: Create a Workflow Service That Calls Another Workflow Service(영문)에 있는 MSDN 문서에서 찾을 수 있습니다.

이 샘플의 주요 목적은 IActivityTemplateFactory 인터페이스를 기반으로 하고, 구성 프로세스를 자동화하여 지속적 이중 구현을 간소화하도록 설계된 두 가지 사용자 지정 작업을 제공하는 것입니다. Workflow Callable Sequence 작업은 워크플로를 만들 때 생성된 기본 수신 및 송신 작업 대신 자식 워크플로에서 사용됩니다. Call Workflow Sequence 작업은 자식 워크플로와 통신하는 데 필요한 작업 및 관련 구성을 생성하기 위해 부모 워크플로에서 사용됩니다. 이러한 작업은 다시 사용 가능하며 Visual Studio 도구 상자에 추가할 수 있습니다.

이 샘플은 다음 두 가지 솔루션으로 구성되어 있습니다.

  • 첫 번째 솔루션(CallWorkflowActivities)에는 위에서 언급한 두 가지 작업이 포함됩니다. Visual Studio Workflow Designer에서 이러한 작업을 사용할 수 있도록 하려면 솔루션을 컴파일하고 결과 어셈블리의 작업을 Visual Studio 도구 상자에 추가합니다.

  • 두 번째 솔루션(DurableDuplex_with_CallWorkflowActivities)은 Workflow Callable SequenceCall Workflow Sequence 작업을 통해 구성된 지속적 이중을 사용하여 통신하는 부모 및 자식 워크플로의 샘플 구현입니다.

참고

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

사전 요구 사항

이 샘플 응용 프로그램은 다음과 같은 경험 또는 지식 수준을 보유한 독자를 대상으로 합니다.

  • IIS(인터넷 정보 서비스)에 대한 기본 지식

  • WCF 및 Windows WF(Workflow Foundation) 응용 프로그램에 대한 기본 지식

  • Windows PowerShell에 대한 기본 지식

  • Microsoft SQL Server에 대한 기본 지식

또한 Windows Server용 Microsoft AppFabric 1.1의 호스팅 서비스를 설치해야 하며, DurableDuplex_with_CallWorkflowActivities 솔루션을 실행하기 위해 다음 기능을 구성해야 합니다.

  • 지속성 저장소

  • 모니터링 저장소

샘플 응용 프로그램 위치 및 파일

해결 방법 1: CallWorkflowActivities

파일 이름 설명

CallWorkflowActivities.sln

CallWorkflowActivities 솔루션의 솔루션 파일

CallWorkflowActivities

프로젝트 폴더

CallWorkflowActivities.csproj

프로젝트 파일

Properties\AssemblyInfo.cs

어셈블리 정보 파일

Activities\WorkflowCallableSequence.cs, Activities \CallWorkflowService.cs

두 IActivityTemplateFactory 작업(WorkflowCallableSequence 및 CallWorkflowService)의 원본 파일

UI\CallWorkflowConfiguration.xaml, UI\CallWorkflowConfiguration.xaml.cs, UI\WebConfigContent.xaml, UI\WebConfigContent.xaml.cs, UI\WorkflowCallableSequenceConfiguration.xaml, UI\WorkflowCallableSequenceConfiguration.xaml.cs

지속적 이중의 구성에 사용되는 대화 상자에 대한 UI 디자인 및 원본 파일

Code\Helpers.cs

지원 클래스가 포함된 원본 코드

Images\requiredBang.gif

필수 필드 이미지 파일

해결 방법 2: DurableDuplex_with_CallWorkflowActivities

파일 이름 설명

DurableDuplex_with_CallWorkflowActivities.sln

DurableDuplex_with_CallWorkflowActivities 솔루션의 솔루션 파일

SampleChildService

샘플 자식 서비스의 프로젝트 폴더

SampleChildService.csproj

샘플 자식 서비스의 프로젝트 파일

Properties\AssemblyInfo.cs

어셈블리 정보 파일

ChildWorkflow.xamlx

자식 서비스 워크플로 정의(XAMLX)

Web.config

자식 서비스에 대한 웹 구성 파일

SampleParentService

부모 자식 서비스의 프로젝트 폴더

SampleParentService.csproj

샘플 부모 서비스의 프로젝트 파일

Properties\AssemblyInfo.cs

어셈블리 정보 파일

ParentWorkflow.xamlx

부모 서비스 워크플로 정의(XAMLX)

Web.config

부모 서비스에 대한 웹 구성 파일

SampleClient

테스트 클라이언트 폴더

SampleClient.csproj

테스트 클라이언트 프로젝트 파일

mainForm.cs, mainForm.Designer.cs, mainForm.resx, Program.cs

기본 양식 및 응용 프로그램에 대한 원본 파일

Properties\Resources.Designer.cs, Properties\Resources.resx, Properties\Settings.Designer.cs, Properties\Settings.settings

리소스 관련 파일 및 프로젝트 설정

Properties\AssemblyInfo.cs

어셈블리 정보 파일

app.config

테스트 클라이언트에 대한 응용 프로그램 설정 파일

이 샘플 설정

  1. 관리자 권한을 사용하여 Visual Studio 2010을 시작합니다.

    참고

    이러한 단계는 Visual Studio 2010을 사용하여 CallWorkflowActivitiesDurableDuplex_with_CallWorkflowActivities 솔루션을 빌드 및 배포하고 이러한 서비스에 사용할 응용 프로그램 풀을 구성하는 방법을 보여 줍니다.

  2. <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\ CallWorkflowActivities\CallWorkflowActivities.sln을 엽니다. 여기서 <samples>는 AppFabric 샘플을 설치한 경로입니다.

  3. 빌드 메뉴에서 솔루션 빌드를 클릭합니다. 출력 창에 오류가 표시되지 않고 프로젝트가 빌드되는지 확인합니다.

    참고

    WorkflowCallableSequence 및 CallWorkflowService 작업이 포함된 어셈블리가 이제 컴파일되었으며 도구 모음에 추가할 준비가 되었습니다. 자세한 내용은 이 샘플 실행 섹션을 참조하십시오.

  4. <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\DurableDuplex_with_CallWorkflowActivities\ DurableDuplex_with_CallWorkflowActivities.sln을 엽니다. 여기서 <samples>는 AppFabric 샘플을 설치한 경로입니다.

  5. SampleParentServiceSampleChildService 프로젝트에 대한 가상 디렉터리를 만들라는 메시지가 표시되면 를 클릭합니다.

  6. 빌드 메뉴에서 솔루션 빌드를 클릭합니다. 출력 창에 오류가 표시되지 않고 세 개의 프로젝트가 빌드되는지 확인합니다.

  7. IIS(인터넷 정보 서비스) 관리자를 시작합니다. 시작, 모든 프로그램, Windows Server용 Microsoft AppFabric 1.1, IIS(인터넷 정보 서비스) 관리자를 차례로 클릭합니다.

  8. 왼쪽의 트리 보기에서 서버 노드를 확장하고 응용 프로그램 풀을 클릭합니다.

  9. 목록에서 샘플 서비스를 실행할 풀(기존 풀 중 하나를 사용하거나 새 풀을 만들 수 있음)을 마우스 오른쪽 단추로 클릭하고 고급 설정을 선택합니다.

  10. 드롭다운 선택을 사용하여 .NET Framework 버전v4.0으로 설정하고 확인을 클릭합니다.

  11. 왼쪽 창에서 사이트, 기본 웹 사이트를 차례로 확장합니다.

  12. SampleChildService 응용 프로그램을 찾아서 마우스 오른쪽 단추를 클릭하고 응용 프로그램 관리, 고급 설정을 차례로 선택합니다.

  13. 사용할 수 있는 프로토콜 속성을 http에서 http,net.pipe로 업데이트합니다. 쉼표 뒤에는 공백이 없어야 합니다. 확인을 클릭하여 변경 내용을 확인합니다.

  14. 응용 프로그램 풀 속성에서 9단계에서 구성한 응용 프로그램 풀을 찾아 선택합니다.

  15. SampleParentService 응용 프로그램을 찾아서 마우스 오른쪽 단추를 클릭하고 응용 프로그램 관리, 고급 설정을 차례로 선택합니다.

  16. 사용할 수 있는 프로토콜 속성을 http에서 http,net.pipe로 업데이트합니다. 쉼표 뒤에는 공백이 없어야 합니다. 확인을 클릭하여 변경 내용을 확인합니다.

  17. 응용 프로그램 풀 속성에서 9단계에서 구성한 응용 프로그램 풀을 찾아 선택합니다.

    참고

    13-16단계에서는 지속된 워크플로 인스턴스의 관리에 필요한 부모 및 자식 서비스 응용 프로그램에 net.pipe 프로토콜을 추가합니다.

이 샘플 실행: 옵션 1

  1. 관리자 권한을 사용하여 Visual Studio 2010을 시작합니다.

    중요

    이 샘플을 실행하는 두 가지 옵션이 있으며 두 옵션에 대한 단계는 이 항목에 나와 있습니다. 옵션 1은 부모 워크플로에서 자식 워크플로를 호출하기 위한 WorkflowCallableSequence 및 CallWorkflowService 작업 사용 경험을 전체적으로 보여 주는 반면 옵션 2는 최종 솔루션인 실행 준비가 완료된 지속적 이중 구현만 확인하고 디자인 경험을 완전히 건너뜁니다. 자세한 내용은 아래의 데모 섹션을 참조하십시오.

    참고

    CallWorkflowActivities 솔루션은 지속적 이중을 구현하는 디자인 타임 경험을 개선하도록 디자인되었으므로 "실행"할 것이 없습니다. 그러나 이러한 단계에서는 부모 워크플로가 자식 워크플로를 호출하는 간단한 솔루션에서 활동을 사용하는 연습을 제공합니다.

  2. WCF 워크플로 서비스 응용 프로그램 유형(이 프로젝트 템플릿은 워크플로 프로젝트 유형 아래에 있음)의 새 프로젝트를 만들고 새 프로젝트 이름을 ChildService로 지정합니다.

  3. 도구 상자에 샘플 사용자 지정 작업 추가: WF 디자이너가 열리면 메시징 작업 그룹 내에서 도구 상자를 마우스 오른쪽 단추로 클릭합니다.

  4. 항목 선택을 선택하고 System.Activities 구성 요소 탭을 클릭합니다.

  5. 찾아보기를 클릭한 다음 <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\ CallWorkflowActivities\ CallWorkflowActivities\bin\Debug로 이동합니다. CallWorkflowActivities.dll 어셈블리를 선택하고 열기를 클릭합니다. 이 어셈블리는 이 문서에 있는 "이 샘플 설정" 섹션의 3단계에서 컴파일한 어셈블리입니다. System.Activities 구성 요소 목록의 맨 위에 두 개의 새 항목이 표시됩니다.

  6. 확인을 클릭하여 CallWorkflowService 및 WorkflowCallableSequence 작업을 도구 상자에 추가합니다. 도구 상자가 다음 스크린 샷처럼 표시됩니다.

  7. ChildService 워크플로 구현: 솔루션 탐색기에서 Service1.xamlx의 이름을 ChildService.xamlx로 바꿉니다.

  8. ChildService의 기본 디자이너 영역에서 순차적 서비스 작업을 선택하고 Delete 키를 누릅니다.

  9. 도구 상자에서 WF 디자인 화면으로 WorkflowCallableSequence 작업을 끌어다 놓습니다. 그러면 지속적 이중에서 ChildService를 참가자로 설정하는 작업을 안내하는 구성 대화 상자가 열립니다.

  10. WorkflowCallableSequence 구성: 다음 스크린 샷에 표시된 대로 속성을 입력하고 확인을 클릭합니다.

  11. web.config 파일 업데이트: 지속적 이중 구현의 기능은 올바른 web.config 항목에 종속됩니다. Web.config 업데이트 화면에서 자식 워크플로의 web.config 파일에 필요한 항목을 자동으로 생성합니다.

    참고

    web.config 파일 자체는 자동으로 업데이트되지 않습니다. 다음 단계에서는 필요한 항목을 복사하여 web.config 파일에 붙여 넣습니다.

  12. 클립보드로 복사 & 닫기를 클릭합니다. 그러면 강조 표시된 필수 항목이 클립보드로 복사되어 web.config 파일에 붙여 넣을 수 있습니다. 메시지 상자에서 확인을 클릭합니다.

  13. ChildService 프로젝트의 web.config 파일을 열고 클립보드(12단계)의 내용을 <system.serviceModel> 태그 바로 뒤에 붙여 넣습니다.

    ...
      <system.serviceModel>
    
        <services>
          <service name="ChildService">
            <endpoint address="" binding="wsHttpContextBinding" contract="ICallChildService" name="ChildServiceICallChildServiceStartWorkflow" />
          </service>
        </services>
        <client>
          <endpoint binding="wsHttpContextBinding" contract="ICallChildService" name="ChildServiceICallChildServiceWorkflowCompleted" />
        </client>
    
        <behaviors>
      ...
    
  14. ChildService 구현 완료: 간단하게 이 워크플로의 본문에서는 요청의 값을 응답에 할당하기만 합니다. 기본적으로 둘 다 문자열이지만 실제 구현에서는 데이터 계약으로 업데이트할 수 있습니다.

    1. 도구 상자에서 본문 시퀀스로 지연 작업을 끌어다 놓습니다. 다음 속성을 사용하여 지연 작업을 구성합니다. Duration = New TimeSpan(0, 2, 0).

    2. 도구 상자에서 본문 시퀀스의 지연 시퀀스 바로 뒤로 할당 작업을 끌어다 놓습니다. 다음 속성을 사용하여 할당 작업을 구성합니다. To = response; Value = request.

    3. 프로젝트를 저장합니다.

  15. IIS/WAS 호스팅에 서비스 사용: IIS/WAS 및 AppFabric에서 호스트되도록 워크플로를 구성하려면 솔루션 탐색기에서 솔루션이 아니라 ChildService 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  16. 세 번째 구성 페이지인 을 선택한 다음 서버 섹션에서 IIS 웹 서버 사용을 선택합니다. 가상 디렉터리 만들기를 클릭한 다음 팝업 메시지 상자에서 확인을 클릭합니다. 프로젝트를 저장합니다.

  17. ParentService 워크플로 만들기: 솔루션 탐색기에서 프로젝트가 아니라 솔루션을 마우스 오른쪽 단추로 클릭하고 추가 - > 새 프로젝트를 선택합니다. 프로젝트 유형으로 WCF 워크플로 서비스 응용 프로그램을 선택하고 새 프로젝트의 이름을 ParentService로 지정합니다. 확인을 클릭합니다.

  18. 솔루션 탐색기에서 Service1.xamlx의 이름을 ParentService.xamlx로 바꿉니다.

  19. 도구 상자에서 WF 디자인 화면의 SendResponse 작업 바로 뒤로 CallWorkflowService 작업을 끌어다 놓습니다. 그러면 CallWorkflowService에 대한 구성 대화 상자가 열립니다.

  20. "…" 단추를 사용하여 이전 단계에서 만든 ChildService.xamlx 워크플로 정의를 찾은 다음 10단계에서 선택한 프로토콜과 일치하는 wsHttpContextBinding을 선택합니다. 구성 창이 다음 스크린 샷처럼 표시됩니다.

    참고

    요청/응답 서비스 계약과 작업 이름에 대한 모든 설정이 자식 서비스 정의에서 자동으로 검색되었습니다.

  21. 확인을 클릭합니다.

  22. web.config 파일 업데이트: Web.config 업데이트 대화 상자가 열리고 자식 서비스에 연결하는 데 필요한 항목이 표시됩니다. 실제 자식 끝점 주소뿐 아니라 콜백 끝점 주소에도 입력이 필요합니다.

  23. 클립보드로 복사 & 닫기를 클릭합니다. 그러면 강조 표시된 web.config 항목이 클립보드로 복사되어 web.config 파일에 붙여 넣을 수 있습니다. 팝업 메시지 상자에서 확인을 클릭합니다.

  24. ParentService 프로젝트의 web.config 파일을 열고 클립보드의 내용을 <system.serviceModel> 요소 바로 뒤에 붙여 넣습니다.

    참고

    XML의 IMPORTANT 주석에 따라 부모 서비스에서도 해당 클라이언트에 대해 끝점을 노출해야 합니다. 이 샘플의 목적을 위해 설명의 일부로 정의된 샘플 <endpoint>를 사용할 수 있습니다. web.config 파일이 다음과 같이 표시됩니다.

    ...
      <system.serviceModel>
    
        <services>
          <service name="Service1">
            <endpoint address="" binding="basicHttpBinding" contract="IService" />
            <endpoint address="ChildCallback" binding="wsHttpContextBinding" contract="ICallChildService" name="Service1ICallChildServiceWorkflowCompleted" />
          </service>
        </services>
        <client>
          <endpoint address="https://localhost/ChildService/ChildService.xamlx" binding="wsHttpContextBinding" bindingConfiguration="Service1ICallChildService_InitCallback" contract="ICallChildService" name="Service1ICallChildServiceStartWorkflow" />
        </client>
        <bindings>
          <wsHttpContextBinding>
            <binding name="Service1ICallChildService_InitCallback" clientCallbackAddress="https://localhost/ParentService/ParentService.xamlx/ChildCallback" />
          </wsHttpContextBinding>
        </bindings>
    
        <behaviors>
          <serviceBehaviors>
      ...
    
  25. ParentService 구현 완료: 부모 워크플로는 자식 서비스에 대한 서비스 호출에 매개 변수 값을 전달해야 합니다.

    1. 요청에 값을 할당하려면 도구 상자에서 호출 워크플로 시퀀스의 송신 요청 작업 바로 앞으로 할당 작업을 끌어다 놓습니다. 다음 속성을 사용하여 할당 작업을 구성합니다. To = request; Value = data.ToString

    2. 프로젝트를 저장합니다.

  26. IIS/WAS 호스팅에 ParentService 사용: IIS/WAS 및 AppFabric에서 호스트되도록 워크플로를 구성하려면 솔루션 탐색기에서 솔루션이 아니라 ParentService 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  27. 세 번째 구성 페이지인 을 선택한 다음 서버 섹션에서 IIS 웹 서버 사용을 선택합니다. 가상 디렉터리 만들기를 클릭한 다음 팝업 메시지 상자에서 확인을 클릭합니다. 프로젝트를 저장합니다.

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

  29. ParentService 및 ChildService 지속적 서비스를 호스트하도록 IIS/WAS 구성: IIS(인터넷 정보 서비스) 관리자를 시작합니다. 시작, 모든 프로그램, Windows Server용 Microsoft AppFabric 1.1, IIS(인터넷 정보 서비스) 관리자를 차례로 클릭합니다.

  30. 왼쪽 창에서 사이트, 기본 웹 사이트를 차례로 확장합니다.

  31. ChildService 응용 프로그램을 찾아서 마우스 오른쪽 단추를 클릭하고 응용 프로그램 관리, 고급 설정을 차례로 선택합니다.

  32. 사용할 수 있는 프로토콜 속성을 http에서 http,net.pipe로 업데이트합니다. 쉼표 뒤에는 공백이 없어야 합니다. 확인을 클릭하여 변경 내용을 확인합니다.

  33. ParentService 응용 프로그램을 찾아서 마우스 오른쪽 단추를 클릭하고 응용 프로그램 관리, 고급 설정을 차례로 선택합니다.

  34. 사용할 수 있는 프로토콜 속성을 http에서 http,net.pipe로 업데이트합니다. 쉼표 뒤에는 공백이 없어야 합니다. 확인을 클릭하여 변경 내용을 확인합니다.

  35. WCFTestClient를 실행하여 부모 워크플로 인스턴스를 시작합니다. 다음 명령을 실행하여 WCF 테스트 클라이언트 응용 프로그램을 실행합니다. C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\WcfTestClient.exe(32비트 플랫폼의 경우) 또는 "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\WcfTestClient.exe"(64비트 플랫폼의 경우).

  36. 추가->서비스 추가를 선택하여 부모 서비스(https://localhost/ParentService/ParentService.xamlx)에 대한 참조를 추가합니다.

  37. 참조를 추가한 후 GetData() 메서드를 두 번 클릭한 다음 왼쪽 창에서 int 매개 변수 값으로 123을 입력합니다. 호출을 클릭합니다.

  38. AppFabric 대시보드를 사용하여 ParentService 및 ChildService 인스턴스의 상태를 확인합니다. ChildService가 완료된 후 자식으로부터 완료 알림을 받으므로 부모도 완료됩니다.

이 샘플 실행: 옵션 2

  1. 관리자 권한을 사용하여 Visual Studio 2010을 시작합니다.

    중요

    이 샘플을 실행하는 두 가지 옵션이 있으며 두 옵션에 대한 단계는 이 항목에 나와 있습니다. 옵션 1은 부모 워크플로에서 자식 워크플로를 호출하기 위한 WorkflowCallableSequence 및 CallWorkflowService 작업 사용 경험을 전체적으로 보여 주는 반면 옵션 2는 최종 솔루션인 실행 준비가 완료된 지속적 이중 구현만 확인하고 디자인 경험을 완전히 건너뜁니다. 자세한 내용은 아래의 데모 섹션을 참조하십시오.

  2. <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\DurableDuplex_with_CallWorkflowActivities\ DurableDuplex_with_CallWorkflowActivities.sln을 엽니다. 여기서 <samples>는 AppFabric 샘플을 설치한 경로입니다.

  3. SampleClient 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 시작 프로젝트로 설정을 클릭하여 SampleClient를 시작 프로젝트로 설정합니다.

  4. F5 키를 눌러 샘플을 실행합니다. 샘플 테스트 클라이언트 응용 프로그램이 시작됩니다.

  5. 부모 서비스 호출을 클릭합니다.

  6. 워크플로 인스턴스 텍스트를 확인합니다. 부모 및 자식 워크플로의 시작/완료 이벤트가 표시됩니다. 이 샘플에서 부모는 ParallelForEach 작업을 사용하여 자식 서비스의 세 인스턴스를 병렬로 시작하고 세 자식이 모두 완료되면 완료됩니다. AppFabric 대시보드를 사용하여 실행 중인 부모/자식 서비스 인스턴스를 추적할 수도 있습니다.

    참고

    자식 워크플로는 시작된 후 2분 동안 절전 상태입니다. 이 기간 동안 모든 부모 및 자식 인스턴스는 유휴 모드로 전환되고 지속성 저장소에 지속됩니다. 완료 이벤트는 이 2분 기간 후에 발생합니다.

이 샘플 제거

  1. IIS(인터넷 정보 서비스) 관리자를 시작합니다. 시작, 모든 프로그램, Windows Server용 Microsoft AppFabric 1.1, IIS(인터넷 정보 서비스) 관리자를 차례로 클릭합니다.

  2. 왼쪽의 트리 보기에서 서버 노드를 확장합니다. 사이트, 기본 웹 사이트를 차례로 확장합니다.

  3. SampleChildService 노드를 클릭하고 제거를 클릭합니다.

  4. 를 클릭하여 선택한 응용 프로그램 제거를 확인합니다.

  5. SampleParentService 노드를 클릭하고 제거를 클릭합니다.

  6. 를 클릭하여 선택한 응용 프로그램 제거를 확인합니다.

  7. "이 샘플 실행" 아래의 옵션 1 지침을 따른 경우 다음 작업도 수행해야 합니다.

    1. ChildService 노드를 클릭하고 제거를 클릭합니다.

    2. 를 클릭하여 선택한 응용 프로그램 제거를 확인합니다.

    3. ParentService 노드를 클릭하고 제거를 클릭합니다.

    4. 를 클릭하여 선택한 응용 프로그램 제거를 확인합니다.

설명

이 샘플을 실행하는 두 가지 옵션이 있으며 두 옵션에 대한 단계는 이 항목에 나와 있습니다. 옵션 1은 이 샘플의 주요 목표인 부모 워크플로에서 자식 워크플로를 호출하기 위한 WorkflowCallableSequence 및 CallWorkflowService 작업 사용 경험을 전체적으로 보여 주기 때문에 옵션 2보다 우선합니다. 옵션 2는 최종 솔루션인 실행 준비가 완료된 지속적 이중 구현만 확인하고 디자인 경험을 완전히 건너뜁니다.

"이 샘플 실행" 아래의 옵션 1은 프로젝트에서 두 개의 사용자 지정 작업을 사용하는 방법을 보여 줍니다.

첫째, 자식 워크플로 서비스를 만듭니다. 기본 순차적 서비스 작업이 삭제된 다음 WorkflowCallableSequence "작업"으로 바뀝니다. WorkflowCallableSequence는 사용자 입력에 따라 콜백 상관 관계를 지원하도록 메시징 작업(수신 및 송신)을 생성 및 구성하는 작업 템플릿 팩터리입니다. 콜백 상관 관계에서 요청 컨텍스트에는 부모에 대한 상관 관계에 사용되는 고유한 컨텍스트 토큰과 완료 알림을 보낼 콜백 주소가 포함되어야 합니다. 수신 작업은 들어오는 요청의 콜백 상관 관계 핸들을 초기화하는 반면, 송신 작업은 해당 핸들을 따라 초기 요청과 함께 전달된 동적 콜백 주소에 있는 부모에 다시 완료 알림을 보냅니다.

WorkflowCallableSequence 논리는 서비스, 서비스 및 클라이언트 끝점, 필요한 모든 바인딩 항목에 대해 web.config 항목을 생성합니다.

다음 단계에서는 부모 워크플로 서비스를 만듭니다. CallWorkflowService 작업 템플릿 팩터리는 자식 정의를 묻는 메시지를 표시하고, 해당 구성을 검사한 다음 이 구성을 기준으로 자식에 대한 지속적 이중 통신에 필요한 메시징 작업(송신 및 수신)을 생성합니다. 송신 작업이 콜백 상관 관계를 초기화한 다음(논리적으로 이 단계에서 고유한 컨텍스트 토큰이 생성되고 요청과 함께 자식 워크플로에 전달됨), 수신 작업이 송신 작업에서 초기화된 상관 관계 핸들과 상호 연결하여 동일한 컨텍스트 토큰을 통해 자식 워크플로에서 반환되는 완료 알림을 상호 연결합니다.

CallWorkflowService 논리는 서비스, 서비스 및 클라이언트 끝점, 필요한 모든 바인딩 항목에 대해 web.config 항목을 생성합니다. 사용자 지정 바인딩 구성의 정의에 clientCallbackAddress 특성이 사용됩니다. 이 주소는 올바른 호출자(이 경우 부모 워크플로)에게 동적으로 응답할 수 있도록 클라이언트에 대한 요청 메시지에 포함되는 주소입니다.

"이 샘플 실행" 아래의 옵션 2는 자식 워크플로의 WorkflowCallableSequence 및 부모 워크플로의 CallWorkflowService를 사용하여 구현된 실행 준비가 완료된 지속적 이중 솔루션을 제공합니다.

클라이언트가 부모 서비스를 호출하고, 부모 서비스에서 다시 ParallelForEach 작업을 사용하여 자식 서비스의 세 인스턴스를 병렬로 시작합니다. 자식 서비스는 부모로부터 초기 메시지를 받은 후 지연 작업을 사용하여 2분 동안 절전 상태가 되고, 이 기간 후에 완료 알림을 다시 부모에게 보냅니다. 자식 서비스의 모든 인스턴스가 완료된 경우에만 부모가 완료됩니다. 부모 및 자식 인스턴스는 모두 "Samples"를 원본으로 사용하여 응용 프로그램 이벤트 로그에 항목을 로깅합니다. 클라이언트 UI는 응용 프로그램 이벤트 로그에서 이 이벤트 원본을 모니터링하여 워크플로 인스턴스 텍스트 상자에 완료 이벤트를 표시합니다.

  2012-03-05