.NET Framework 4는 Windows Workflow Foundation에 다양한 기능을 추가합니다. 이 문서에서는 다양한 새로운 기능을 설명하고 유용할 수 있는 시나리오에 대한 세부 정보를 제공합니다.
메시징 활동
메시징 활동(Receive, SendReply, ,SendReceiveReply)은 워크플로에서 WCF 메시지를 보내고 받는 데 사용됩니다. Receive 및 SendReply 활동은 표준 WCF 웹 서비스와 마찬가지로 WSDL을 통해 노출되는 WCF(Windows Communication Foundation) 서비스 작업을 구성하는 데 사용됩니다. SendWCFReceiveReply와 ChannelFactory 유사한 웹 서비스를 사용하는 데 사용됩니다. 미리 구성된 활동을 생성하는 Workflow Foundation에 대한 서비스 참조 추가 환경도 있습니다.
메시징 활동 시작
Visual Studio 2012에서 WCF 워크플로 서비스 애플리케이션 프로젝트를 만듭니다. Receive와 SendReply 한 쌍이 귀하의 캔버스에 배치됩니다.
프로젝트를 마우스 오른쪽 단추로 클릭하고 서비스 참조 추가를 선택합니다. 기존 웹 서비스 WSDL을 가리키고 확인을 클릭합니다. 프로젝트를 빌드하여 도구 상자에 Send 및 ReceiveReply을(를) 사용하여 구현된 생성된 작업을 표시하세요.
메시징 활동 예제 시나리오
서비스는 BestPriceFinder
특정 노선에 가장 적합한 항공권 가격을 찾기 위해 여러 항공사 서비스를 호출합니다. 이 시나리오를 구현하려면 메시지 활동을 사용하여 가격 요청을 받고, 백 엔드 서비스에서 가격을 검색하고, 가장 좋은 가격으로 가격 요청에 회신해야 합니다. 또한 최상의 가격을 계산하기 위한 비즈니스 논리를 만들기 위해 다른 기본 제공 활동을 사용해야 합니다.
WorkflowServiceHost
여러 WorkflowServiceHost 인스턴스, 구성 및 WCF 메시징을 지원하는 기본 워크플로 호스트입니다(워크플로가 호스팅되기 위해 메시징을 사용할 필요는 없지만). 또한 서비스 동작 집합을 통해 지속성, 추적 및 인스턴스 제어와 통합됩니다. WCF의 ServiceHost와 마찬가지로, WorkflowServiceHost는 콘솔/WinForms/WPF 애플리케이션, Windows 서비스에서 자체 호스팅되거나 IIS, WAS에서 .xamlx 파일로 웹 호스팅될 수 있습니다.
워크플로 서비스 호스트 시작
Visual Studio 2010에서 WCF 워크플로 서비스 애플리케이션 프로젝트를 만듭니다. 이 프로젝트는 웹 호스트 환경에서 사용하도록 WorkflowServiceHost 설정됩니다.
비 메시징 워크플로를 호스트하려면 메시지를 기반으로 인스턴스를 만드는 사용자 지정 WorkflowHostingEndpoint 을 추가합니다.
워크플로 인스턴스를 제어하려면(예: 일시 중단 또는 종료) WorkflowControlEndpoint를 WorkflowServiceHost에 추가한 후 WorkflowControlClient을(를) 사용하십시오.
샘플은 WorkflowServiceHost 다음 섹션에서 찾을 수 있습니다.
애플리케이션: 일시 중단된 인스턴스 관리
WorkflowServiceHost 시나리오
BestPriceFinder 서비스는 특정 노선에 가장 적합한 항공권 가격을 찾기 위해 여러 항공사 서비스를 호출합니다. 이 시나리오를 구현하려면 워크플로 WorkflowServiceHost를 호스트해야 합니다. 또한 메시지 활동을 사용하여 가격 요청을 받고, 백 엔드 서비스에서 가격을 검색하고, 최상의 가격으로 가격 요청에 회신합니다.
상관관계
상관 관계는 다음 두 가지 중 하나입니다.
메시지를 그룹화 하는 방법; 즉, 요청 메시지와 해당 회신 간의 관계입니다.
데이터 조각을 서비스 인스턴스에 매핑하는 방법
시작하기
상관 관계를 시작하려면 Visual Studio에서 새 프로젝트를 만듭니다. 형식의 변수를 만듭니다 CorrelationHandle.
메시지를 함께 그룹화하는 데 사용되는 상관 관계의 예는 메시지를 함께 그룹화하는 Request-Reply 상관 관계입니다.
Receive 활동의 CorrelationInitializers 속성을 클릭하고 위의 첫 번째 단계에서 만든 CorrelationHandle을 사용하여 RequestReplyCorrelationInitializer를 추가합니다.
SendReply에서 마우스 오른쪽 버튼을 클릭한 후 "SendReply 만들기"를 클릭하여 Receive 활동을 생성합니다. 워크플로에는 Receive 활동 이후에 붙여넣습니다.
데이터 조각을 서비스 인스턴스에 매핑하는 예제는 데이터 조각(예: 주문 ID)을 특정 워크플로 인스턴스에 매핑하는 콘텐츠 기반 상관 관계입니다.
- 모든 메시징 활동에서
CorrelationInitializers
속성을 클릭하고, 위에서 만든 QueryCorrelationInitializer 변수를 사용하여 CorrelationHandle을 추가합니다. 드롭다운 메뉴에서 메시지에 있는 원하는 속성(예: OrderID)을 두 번 클릭합니다.CorrelatesWith
속성을 위에서 사용한 변수로 CorrelationHandle 설정합니다.
- 모든 메시징 활동에서
상관 관계 시나리오
주문 처리 워크플로는 새 주문 생성을 처리하고 처리 중인 기존 주문을 업데이트하는 데 사용됩니다. 이 시나리오를 구현하려면 워크플로 WorkflowServiceHost 를 호스트하고 메시징 활동을 사용해야 합니다. 또한 올바른 워크플로에 orderId
대한 업데이트가 이루어지도록 하기 위해 상관 관계가 필요합니다.
간소화된 구성
WCF 구성 스키마는 복잡하며 사용자에게 찾기 어려운 많은 기능을 제공합니다. .NET Framework 4.6.1에서는 WCF 사용자가 다음 기능을 사용하여 서비스를 구성할 수 있도록 돕는 데 집중했습니다.
명시적 서비스별 구성의 필요성을 제거합니다. 서비스에 대한 서비스< 요소를 구성>하지 않고 서비스가 프로그래밍 방식으로 엔드포인트를 정의하지 않는 경우 서비스 기본 주소당 하나씩, 서비스에서 구현한 계약별로 엔드포인트 집합이 자동으로 서비스에 추가됩니다.
사용자가 명시적 구성 없이 서비스에 적용되는 WCF 바인딩 및 동작에 대한 기본값을 정의할 수 있도록 합니다.
표준 엔드포인트는 하나 이상의 엔드포인트 속성(주소, 바인딩 및 계약)에 대한 고정 값이 있는 재사용 가능한 미리 구성된 엔드포인트를 정의하고 사용자 지정 속성을 정의할 수 있습니다.
마지막으로, ConfigurationChannelFactory<TChannel> 애플리케이션 도메인 로드 시간 후에 구성을 선택하거나 변경하는 시나리오에서 유용한 WCF 클라이언트 구성의 중앙 관리를 수행할 수 있습니다.
시작하기
간소화된 구성 시나리오
숙련된 ASMX 개발자가 WCF 사용을 시작하려고 합니다. 그러나 WCF는 너무 복잡해 보입니다! 구성 파일에 작성해야 하는 모든 정보는 무엇인가요? .NET 4에서는 구성 파일이 전혀 없도록 결정할 수도 있습니다.
기존 WCF 서비스 집합은 구성 및 유지 관리하기가 매우 어렵습니다. 구성 파일에는 터치하기에 매우 위험한 수천 줄의 XML 코드가 있습니다. 이러한 코드 양을 관리하기 쉬운 코드로 줄이려면 도움이 필요합니다.
데이터 계약 해결 프로그램
.NET Framework 3.5에서는 알려진 형식의 디자인에 몇 가지 제한 사항이 있었습니다.
serialization 또는 deserialization 중에 알려진 형식을 동적으로 추가할 수 없었습니다.
Serializer는 알 수 없는 xsi:type 정보를 처리할 수 없습니다.
예를 들어 사용자가 와이어에 표시할 xsi:type을 지정하여 와이어의 serialization 인스턴스 크기를 더 작게 만들 수 없었습니다.
DataContractResolver는 .NET Framework 4.5에서 이러한 문제를 해결합니다.
시작하기
데이터 계약 해결 프로그램 시나리오
서비스에서 수십 개체 KnownTypeAttribute 를 선언할 필요가 없습니다.
XML Blob의 크기를 줄입니다.
순서도
순서도는 특정 분야의 문제를 시각적으로 표현하는 잘 알려진 방법입니다. .NET Framework 4에서 소개하는 새로운 제어 흐름 스타일입니다. 순서도의 핵심 특징은 지정된 시간에 하나의 활동만 실행된다는 것입니다. 순서도는 루프 및 대체 결과를 표현할 수 있지만 기본적으로 여러 노드의 동시 실행을 표현할 수는 없습니다.
시작하기
Visual Studio 2012에서 워크플로 콘솔 애플리케이션을 만듭니다. 워크플로우 디자이너에서 플로차트를 추가합니다.
순서도 기능은 다음 클래스를 사용합니다.
샘플:
디자이너 설명서:
시나리오 플로우차트
순서도 작업을 사용하여 추측 게임을 구현할 수 있습니다. 추측 게임은 매우 간단합니다 : 컴퓨터가 난수를 선택하고 플레이어는 그 숫자를 추측해야. 플레이어가 각 추측을 제출하면 컴퓨터에 힌트가 표시됩니다(예: "더 낮은 숫자 사용해 보기"). 플레이어가 7회 미만의 시도에서 숫자를 찾으면 컴퓨터에서 특별한 축하를 받습니다. 이 게임은 다음 절차 활동의 조합으로 구현할 수 있습니다.
프로세스 활동(Sequence, If, ForEach, Switch, Assign, DoWhile, While)
절차 활동은 프로그래머에게 친숙한 개념을 사용하여 순차적 제어 흐름을 모델링하는 메커니즘을 제공합니다. 이러한 활동을 통해 전통적으로 구조화된 프로그래밍 언어 구문을 사용할 수 있으며, 적절한 경우 C# 및 Visual Basic과 같은 일반적인 절차 언어와 언어 패리티를 제공합니다.
시작하기
Visual Studio 2012에서 워크플로 콘솔 애플리케이션을 만듭니다. 워크플로 디자이너에서 절차 활동을 추가합니다.
샘플:
디자이너 설명서:
절차 작업 시나리오
Parallel: 인트라넷 문서 관리 시스템에 문서 승인 워크플로가 있습니다. 인트라넷에 게시하려면 여러 부서의 사용자가 문서를 승인해야 합니다. 승인에 대한 설정된 순서는 없습니다. 문서가 "승인 보류 중" 단계에 있는 동안 언제든지 발생할 수 있습니다. 사용자가 검토를 위해 문서를 제출하는 경우 직접 관리자, 인트라넷 관리자 및 내부 통신 관리자의 승인을 받아야 합니다.
ParallelForEach<T>: WF 애플리케이션은 대기업 내에서 기업 구매를 관리합니다. 기업 규칙에 따르면 구매 작업을 계획하기 전에 세 가지 공급업체의 평가가 필요합니다. 구매 부서의 직원은 회사의 공급업체 목록에서 3개의 공급업체를 선택합니다. 이러한 공급 업체를 선택하고 통보 한 후, 회사는 자신의 경제 제안을 기다릴 것입니다. 제안은 어떤 순서로 올 수 있습니다. WF에서 이 시나리오를 구현하려면 ParallelForEach<T>를 사용하여 공급업체 컬렉션을 반복하고 그들의 경제 제안을 요청합니다. 모든 제안이 수집된 후, 최상의 제안이 선택되어 표시됩니다.
메소드 호출
이 InvokeMethod 작업을 통해 범위의 개체 또는 형식에서 공용 메서드를 호출할 수 있습니다. 매개 변수(매개 변수 배열 포함) 및 제네릭 메서드를 사용하거나 사용하지 않는 인스턴스 및 정적 메서드 호출을 지원합니다. 또한 메서드를 동기 및 비동기적으로 실행할 수 있습니다.
시작하기
Visual Studio 2012에서 워크플로 콘솔 애플리케이션을 만듭니다. InvokeMethod 워크플로 디자이너에 활동을 추가하고 정적 및 인스턴스 메서드를 구성합니다.
디자이너 설명서: InvokeMethod 활동 디자이너
InvokeMethod 메소드 호출 시나리오
유효 범위 내 객체에 있는 메서드를 호출해야 합니다. 예를 들어 사전에 값을 추가해야 합니다. 사전 인스턴스의 Add 메서드가 호출되고 키와 값이 제공됩니다.
레거시 CLR 개체에서 메서드를 호출해야 합니다. 워크플로 실행 중 해당 레거시 클래스가 범위에 있다면, 해당 클래스를 호출하기 위한 사용자 지정 활동을 만들 필요 없이 InvokeMethod을 사용할 수 있습니다.
오류 처리 작업
이 활동은 TryCatch 포함된 활동 집합을 실행하는 동안 발생하는 예외를 catch하기 위한 메커니즘을 제공합니다(C# 및 Visual Basic의 Try/Catch 구문과 유사). TryCatch 는 워크플로 수준에서 예외 처리를 제공합니다. 처리되지 않은 예외가 throw되면 워크플로가 중단되고 Finally 블록이 실행되지 않습니다. 이 동작은 C#과 일치합니다.
시작하기
Visual Studio 2012에서 워크플로 콘솔 애플리케이션을 만듭니다. TryCatch 워크플로 디자이너에서 활동을 추가합니다.
디자이너 설명서: 오류 처리 활동 디자이너
오류 처리 시나리오
작업 집합을 실행해야 하며 오류가 발생할 때 특정 논리를 실행해야 합니다. 해당 오류 처리 논리 중에 오류를 복구할 수 없는 것으로 확인되면 예외가 다시 throw되고 부모 작업(또는 호스트)이 문제를 처리합니다.
작업 선택
이 활동은 Pick WF에서 이벤트 기반 제어 흐름 모델링을 제공합니다. Pick 에는 각 분기가 실행되기 전에 특정 이벤트가 발생할 때까지 대기하는 많은 분기가 포함되어 있습니다. 설정에서는 Pick이(가) Switch<T>와 유사하게 동작하며, Activity는 수신 중인 이벤트 집합 중 하나만 실행하게 됩니다. 각 분기는 이벤트 구동이며 발생하는 이벤트는 먼저 해당 분기를 실행합니다. 다른 모든 분기는 이벤트 수신 대기를 취소하고 중지합니다.
시작하기
Visual Studio 2012에서 워크플로 콘솔 애플리케이션을 만듭니다. Pick 워크플로 디자이너에서 활동을 추가합니다.
샘플: 선택 작업 사용
디자이너 설명서: 활동 디자이너 선택
시나리오 선택
사용자에게 입력하라는 메시지가 표시되어야 합니다. 일반적인 상황에서 개발자는 메서드 호출 ReadLine 을 사용하여 사용자의 입력을 요청합니다. 이 설정의 문제는 프로그램이 사용자가 항목을 입력할 때까지 대기한다는 것입니다. 이 시나리오에서는 차단 작업을 중단시키기 위해 시간 초과 설정이 필요합니다. 일반적인 시나리오는 지정된 기간 내에 작업을 완료해야 하는 시나리오입니다. 차단 활동의 시간이 초과될 때는 Pick이 큰 가치를 제공하는 시나리오입니다.
WCF 라우팅 서비스
라우팅 서비스는 클라이언트와 서비스 간에 WCF 메시지가 흐르는 방식을 제어할 수 있는 일반 소프트웨어 라우터로 설계되었습니다. 라우팅 서비스를 사용하면 서비스에서 클라이언트를 분리할 수 있으므로 지원할 수 있는 구성과 서비스를 호스트하는 방법을 고려할 때 사용할 수 있는 유연성 측면에서 훨씬 더 자유롭게 사용할 수 있습니다. .NET Framework 3.5에서는 클라이언트와 서비스가 긴밀하게 결합되었습니다. 클라이언트는 통신하는 데 필요한 모든 서비스와 해당 서비스가 있는 위치에 대해 알고 있어야 했습니다. 또한 .NET Framework 3.5의 WCF에는 다음과 같은 제한 사항이 있습니다.
이 논리를 클라이언트에 하드 코딩해야 했기 때문에 오류 처리는 복잡했습니다.
클라이언트와 서비스는 항상 동일한 바인딩을 사용해야 했습니다.
서비스는 거의 잘 고려되지 않았습니다. 클라이언트가 여러 서비스 중에서 선택할 필요 없이 모든 것을 구현하는 하나의 서비스와 통신하는 것이 더 쉽습니다.
.NET 4의 라우팅 서비스는 이러한 문제를 보다 쉽게 해결할 수 있도록 설계되었습니다. 새 라우팅 서비스에는 다음과 같은 기능이 있습니다.
콘텐츠 기반 라우팅(MessageFilter 개체는 메시지를 검사하여 메시지를 보낼 위치를 결정합니다.)
프로토콜 연결(전송 및 메시지)
오류 처리(라우터가 통신 예외를 포착하고 장애 발생 시 백업 엔드포인트로 자동 전환)
메모리 내 동적 업데이트 MessageFilterTable<TFilterData> 및 라우팅 구성
시작하기
설명서: 라우팅
샘플: 라우팅 서비스 [WCF 샘플]
블로그: 라우팅 규칙!
라우팅 시나리오
라우팅 서비스는 다음 시나리오에서 유용합니다.
클라이언트는 모든 서비스를 직접 처리하지 않고도 여러 서비스와 통신할 수 있습니다.
클라이언트는 클라이언트 요청에 대해 추가 논리를 수행하여 라우팅할 위치를 결정할 수 있습니다.
클라이언트를 리팩터링하지 않고 클라이언트가 수행하는 작업을 여러 서비스 구현으로 분해합니다.
클라이언트와 서비스는 서로 다른 보안 설정을 사용하여 서로 다른 바인딩을 말할 수 있습니다.
클라이언트는 실패 또는 서비스 사용 불가에 대해 더 강력하도록 설정할 수 있습니다.
WCF 검색
WCF 검색은 검색 메커니즘을 애플리케이션 인프라에 통합할 수 있는 프레임워크 기술입니다. 이 기능을 사용하여 서비스를 검색할 수 있도록 하고 서비스를 검색하도록 클라이언트를 구성할 수 있습니다. 클라이언트는 더 이상 엔드포인트를 사용하여 하드 코딩할 필요가 없으므로 애플리케이션이 더 강력하고 내결함성이 높습니다. 발견은 애플리케이션에 자동 구성 기능을 구축할 수 있는 완벽한 플랫폼입니다.
이 제품은 WS-Discovery 표준에 따라 빌드됩니다. 상호 운용 가능하고 확장 가능하며 제네릭이 되도록 설계되었습니다. 제품은 다음 두 가지 작업 모드를 지원합니다.
관리: 기존 서비스에 대한 지식이 있는 네트워크에 엔터티가 있는 경우 클라이언트는 정보를 직접 쿼리합니다. 이는 Active Directory와 유사합니다.
임시: 클라이언트가 멀티캐스트 메시지를 사용하여 서비스를 찾는 위치입니다.
또한 검색 메시지는 네트워크 프로토콜에 구애받지 않습니다. 모드 요구 사항을 지원하는 모든 프로토콜에서 사용할 수 있습니다. 예를 들어 검색 멀티캐스트 메시지는 UDP 채널 또는 멀티캐스트 메시징을 지원하는 다른 네트워크를 통해 보낼 수 있습니다. 이러한 디자인 포인트는 기능 유연성과 결합되어 검색을 솔루션에 맞게 조정할 수 있습니다.
시작하기
검색 시나리오
개발자는 내 서비스를 사용할 수 있는 시기를 알 수 없으므로 엔드포인트를 하드 코드하려고 하지 않습니다. 대신 개발자는 런타임에 서비스를 선택하려고 합니다. 애플리케이션의 구성 요소 간에 더 많은 분리, 견고성 및 자동 구성이 필요합니다.
추적
워크플로 추적은 워크플로 인스턴스의 실행에 대한 인사이트를 제공합니다. 추적 이벤트는 워크플로 인스턴스 수준 및 워크플로 내의 활동이 실행될 때 워크플로에서 내보내집니다. 추적 레코드를 구독하려면 워크플로 추적 참가자를 워크플로 호스트에 추가해야 합니다. 추적 레코드는 추적 프로필을 사용하여 필터링됩니다. .NET Framework는 ETW(Windows용 이벤트 추적) 추적 참가자를 제공하며 기본 프로필은 machine.config 파일에 설치됩니다.
시작하기
Visual Studio 2010에서 WCF 워크플로 서비스 애플리케이션 프로젝트를 만듭니다. A Receive 와 SendReply 쌍이 캔버스에 배치되어 시작됩니다.
web.config 열고 프로필 없이 ETW 추적 동작을 추가합니다.
기본 프로필이 사용됩니다.
이벤트 뷰어를 열고 이벤트 뷰어, 애플리케이션 및 서비스 로그, Microsoft, Windows, Application Server-Applications 노드에서 분석 채널을 사용하도록 설정합니다. 분석을 마우스 오른쪽 단추로 클릭하고 로그 사용을 선택합니다.
워크플로 서비스를 실행합니다.
이벤트 뷰어에서 워크플로 추적 이벤트를 관찰합니다.
샘플: 추적
개념 설명서: 워크플로 추적 및 추적
SQL 워크플로 인스턴스 저장소
인스턴스 SqlWorkflowInstanceStore 저장소의 SQL Server 기반 구현입니다. 인스턴스 저장소는 실행 중인 인스턴스의 상태를 해당 인스턴스를 로드하고 다시 시작하는 데 필요한 모든 데이터와 함께 저장합니다. 서비스 호스트는 워크플로가 지속되는 경우 인스턴스 상태를 저장하도록 인스턴스 저장소에 지시하고, 인스턴스에 대한 메시지가 도착하거나 지연 작업이 만료되면 인스턴스 상태를 로드하도록 인스턴스 저장소에 지시합니다.
시작하기
Visual Studio 2012에서 암시적 또는 명시적 Persist 작업이 포함된 워크플로를 만듭니다. SqlWorkflowInstanceStore 워크플로 서비스 호스트에 동작을 추가합니다. 이 작업은 코드 또는 애플리케이션 구성 파일에서 수행할 수 있습니다.
샘플 : 지속성
개념 설명서: SQL 워크플로 인스턴스 저장소.
.NET