문제

일부 응용 프로그램 "마스터"는 "슬레이브"라는 균질 프로세스에 명령을 보내서 일부 작업을 수행 한 다음 상태 완료 또는 프로세스 실패로 다시 응답하는 마스터 슬레이브 명령 모델을 개발하고 있습니다. 또한 요청시 이용 가능한 마스터에 일부 데이터를 노출해야합니다.

이 모델은 WCF에서 어떤 모습입니까?

노예 호스트의 마스터와 각 인스턴스는 자신의 서비스를 주최할까요? 마스터 호스트 만할까요? 노예 만? 콜백 계약을 사용해야합니까? 데이터 계약? 또는 단지 서비스 계약.

참고로, 이것은 제품 테스트에 사용되는 저 대역폭, 낮은 강도, 내부 배포 프로젝트이며 "대규모 높은 수요"프로젝트로 간주해서는 안됩니다.

도움이 되었습니까?

해결책

당신은 확실히 어떤 형태 나 형태로 서비스 계약 (필수 - 필수)을 가질 것입니다. 이것은 단지 귀하의 서비스와 운영 (메소드)을 정의합니다 (OperationContract).

내부 "비 배후의"시스템 인 경우, 이중 바인딩을 볼 수 있습니다. 예 : 마스터가 슬레이브를 호출하고 슬레이브 보고서가 이중 채널에 다시보고되면이 듀플렉스 채널에 다시보고 할 수 있습니다. 상자 밖에서, 듀플렉스를 지원하기위한 wsdualhttpbinding 만 있지만, 당신은 내부, 비하인드 비하인드이기 때문에 자신의 TCP 기반 듀플렉스 바인딩을 만드는 것을보고 싶을 것입니다 (소리가 들리는 것만 큼 어렵지 않습니다. 첫 번째!).

이 시나리오에서 관련 앱은 실제로 서버와 클라이언트입니다.

마스터와 슬레이브 사이에서 이동중인 데이터를 정의하기 위해 어떤 방식으로, 모양 또는 양식을 사용하여 데이터 계약을 갖게됩니다. 다시 말하지만, 데이터 계약이 있어야합니다.

편집 : 물론 또 다른 방법은 두 개의 MSMQ 메시지 대기열을 사용하는 것입니다. 마스터는 자신의 "작업"요청을 큐에 삭제하여 슬레이브가 청취하고 작업 요청을 집어 들었습니다. 슬레이브가 완료되면, 그것은 마스터가 청취자 인 응답 대기열에 응답을 삭제하고, 그런 식으로 수행되는 작업에 대해 통보받습니다.

마크

다른 팁

나는 여기서 Jeremy와 동의합니다 .. 당신이 묘사 한 것은 콜백 계약의 복잡성이 필요하지 않습니다. 작업자 노드는 단순히 WCF 서비스 (또는 해당 문제에 대해 WSDL 또는 REST 웹 서비스를 노출시킬 수 있습니다 ...) 컨트롤러는 단순히 각 하위 노드의 URL을 알고 작업자 노드에 메시지를 보냅니다.

컨트롤러가 단일 메시지를 방송 할 수 있고 모든 작업자를 갖기를 원한다면 (나는 마스터/슬레이브 유추를 정말 싫어합니다 ... 나는 오래 전에 컨트롤러/작업자라고 부르기 위해 전환했습니다) 노드는 응답으로 무언가를하고 게시합니다. 그룹으로 돌아 오면 WCF 내에서 사용 가능한 자주 과소 평가 된 P2P 채널을 사용할 수 있습니다. 이를 통해 WCF로 작성된 서비스 그룹은 URL이 거의 주제/대화 분리기와 같은 URL을 사용하는 동료로서 한 번에 서로 대화 할 수 있습니다.

예를 들어, 당신은 net.p2p : // labs/commands 채널. 컨트롤러 만 해당 채널에서 명령을 보내지 만 모든 작업자 노드는 듣습니다. 그들이 비동기 적으로 일을 끝냈을 때, 그들은 다시 진행 상황을보고 할 수 있습니다. net.p2p : // labs/status 채널. 이 접근법의 추가 이점은 (이 기능이 필요한 경우) 개별 근로자는 다른 모든 근로자가 무엇을하고 있는지 알 수 있다는 것입니다.

그러나 P2P를 사용하는 경우 경합을 처리해야합니다. 동일한 명령을 수락하는 2 개의 노드로 끝날 수 있습니다. 이것이 괜찮다면 P2P가 도구입니다. 명령을 발행해야하고 개별 노드가 자유롭게되면 직렬로 만 픽업 해야하는 경우 (원격 노드에 개별 테스트 스크립트를 실행하도록 지시 할 때 더 많은 시나리오) P2P 대신 MSMQ 바인딩을 사용할 수 있습니다. 그런 다음 모든 근로자는 대기열에서 메시지를받는 고객이되고 동일한 요청을 수락하는 여러 근로자의 상황에 더 쉽게 대응할 수 있습니다.

추가 참조 :내가 피어 채널에 잠시 쓴 블로그 게시물.

MSDN의 피어 채널 시나리오 - 여기에서 피어 채널 개념으로 참조 안내서로 갈 수 있기 때문에 좋습니다.

피어 채널 팀 블로그

슬레이브 처리에 시간이 오래 걸리면 콜백 계약이 순서대로있을 수 있습니다. 그렇지 않으면 노예가 완료되기를 기다리는 마스터를 차단할 수 있습니다 (시간이 내지 않도록 WCF 클라이언트 구성을 조정해야 할 수도 있습니다).

설명을 바탕으로 슬레이브 노드에서 WCF 서비스 만 호스팅하면되며 마스터는 슬레이브가 노출 한 WCF 서비스를 소비하는 클라이언트 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top