WorkflowServiceHost를 사용하는 접근 방식은 WorkflowApplication을 사용하는 다른 형식이 아닙니다. 다양한 XAML (X) 버전을 계속 유지하는 기본 사항이 계속 적용됩니다. 따라서 WorkflowServiceHost의 경우 각각 다른 XAMLX 버전을 호스팅하는 여러 WorkflowServiceHost를 만들어야합니다. 각각 다른 엔드 포인트가 있습니다. 따라서 기본적으로 en 엔드 포인트는 워크 플로 서비스와 해당 버전을 처리합니다.
그래서 클라이언트에서 올바른 WorkflowServiceHost로 메시지를 가져 오는 방법은 무엇입니까? 여기 WCF 라우팅 서비스는 당신의 친구입니다. 클라이언트가 WorkflowServiceHost와 직접 통신하는 대신 중간 WCF 라우팅 서비스를 사용합니다. 이렇게하면 메시지가 확인되고 해당 XAMLX 파일을 호스팅하는 WorkflowServiceHost로 라우트됩니다. 어떻게 알 수 있습니까? 몇 가지 방법이 있습니다. 예를 들어 메시지 상관 식별자를 사용하여 새 워크 플로에 대한 요청과 함께 항상 마지막 버전으로 이동하는 데이터베이스 조회를 수행합니다. 가장 쉬운 방법은 워크 플로 서비스에서 초기 요청의 일부로 버전 번호를 반환하고 이후의 각 요청에서이 부분을 필수 구성 요소로 만드는 것입니다. 이렇게하면 WCF 라우팅 서비스는 메시지 데이터 만 보내면 모든 작업을 수행 할 수 있습니다.
예로들 수 :
- 클라이언트 주문 ID (7)을 사용하여 새로운 흐름을 개시하는 메시지를 전송하고 다시 3 버전을 수신한다. 클라이언트 응용 프로그램은 URL httl : //localhost/MyWorkflow.xaml을 사용하고 라우팅 서비스는 마지막 버전 인 httl : //localhost/MyWorkflow.v3.xamlx로 전달합니다. 이 워크 플로우로 전송
- 다음 메시지에 OrderID 및 버전을 모두 포함 3. 클라이언트 응용 프로그램은 URL의 HTTL을 사용 //localhost/MyWorkflow.xaml 및 라우팅 서비스 전달이 HTTL하기 : //localhost/MyWorkflow.v3.xamlx되는 표시된 버전.
- 클라이언트 앱이 이전 워크 플로에 메시지를 보내려고합니다. orderid 2와 버전 1을 사용합니다 (이 워크 플로우가 시작될 때 응답 됨). 클라이언트 응용 프로그램은 URL httl : //localhost/MyWorkflow.xaml을 사용하고 라우팅 서비스는 추가 된 버전 인 httl : //localhost/MyWorkflow.v1.xamlx로 전달합니다.
WCF 라우팅 서비스에 대한 자세한 내용은 these 스크린 캐스트를 확인하십시오.
정교한 답변을 주셔서 감사합니다. 이 일을 끝내기 위해 꽤 많은 배관 공사가 필요합니다. –
예. 아직 완전히 구워지지 않은 분야 중 하나입니다. – Maurice
안녕하세요! 버전 관리에 대해 약간의 질문이 있습니다. 워크 플로에서 참조되는 어셈블리는 어떻습니까? 나는 나의 호스트 사이트 내 bin 디렉토리에 wf 파일을 배포했다. 그러나 내 persisted 인스턴스를 깨뜨린 (어셈블리 로직을 사용하여) 어셈블리 중 하나의 새로운 버전을 복사 할 때 잃어버린다. 여기 .. .. 고마워! (ps. sorry my english sucks!)) – pabloide86