2009-04-13 2 views
1

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

이 모델은 WCF에서 어떻게 보입니까?

마스터와 슬레이브 호스트의 각 인스턴스는 자신의 서비스를 제공합니까? 마스터 호스트 만하겠습니까? 슬레이브 만? 콜백 계약을 사용해야합니까? 데이터 계약? 또는 단지 서비스 계약.

부수적으로 이것은 제품 테스트에 사용되는 저 대역폭, 저 강도 내부 전용 배포 프로젝트이므로 "대규모 수요가 많은"프로젝트로 간주되어서는 안됩니다.

답변

2

서비스 계약은 반드시 일정한 형태 또는 형태로 제공됩니다. 이것은 서비스와 오퍼레이션 (메소드)을 정의합니다 (OperationContract).

내부 "방화벽 뒤"시스템 인 경우 양면 인쇄 바인딩을 볼 수 있습니다. 마스터가 슬레이브를 호출하게하고, 슬레이브가 완료되면 슬레이브가 이중 채널에서 다시보고하도록합니다. 기본적으로 듀플렉스를 지원하는 WsDualHttpBinding 만 있지만 방화벽 내부의 내부이기 때문에 자신 만의 TCP 기반 듀플렉스 바인딩을 만들 수 있습니다 (단단하지는 않습니다). 먼저!).

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

마스터와 슬레이브 사이를 돌아 다니는 DATA를 정의하기 위해 DataContracts를 어떤 방식 으로든, 모양으로 또는 형식으로 만들 것입니다. 다시 말하지만 데이터 계약이 있어야합니다.

EDIT : 물론 다른 방법으로는 두 개의 MSMQ 메시지 큐를 사용할 수 있습니다. 마스터는 자신의 "작업"요청을 대기열에 넣고, 슬레이브는이를 청취하고 작업 요청을 선택합니다. 슬레이브가 완료되면 마스터가 리스너 인 응답 큐에 응답을 차례로 보내고 그런 식으로 작업이 통지됩니다.

마크 난 당신이 콜백 계약의 복잡성을 필요로하지 않는다 설명하고 여기에서 제레미 .. 동의

0

슬레이브 처리에 오랜 시간이 걸리는 경우 콜백 계약이 순서대로 수행 될 수 있습니다. 그렇지 않으면 마스터가 슬레이브가 완료되기를 기다리는 것을 막을 수 있습니다 (WCF 클라이언트 구성을 조정하여 시간이 초과되지 않도록해야 할 수도 있음).

설명에 따르면, 실제로 슬레이브 노드에서 WCF 서비스 만 호스팅하면되고 마스터는 슬레이브가 제공하는 WCF 서비스를 사용하는 클라이언트 일 수 있다고 생각합니다.

+0

는 여러 프로세스가 동일한 URI에서 서비스를 호스팅 할 수 있습니다, 어떻게합니까까지 엔드 포인트 대신의 app.config의,의 프로그램에 엔드 포인트 가서 그 일? 나는 그것의 소리에서 확실히 콜백 계약이 필요할 것이다. – Firoso

1

. 작업자 노드는 단순히 WCF 서비스 (또는 WSDB 또는 REST 웹 서비스까지도)를 노출 할 수 있으며 컨트롤러는 각 자식 노드의 URL을 알고 작업자 노드로 메시지를 보내면됩니다.

컨트롤러가 단일 메시지를 브로드 캐스트하고 모든 작업자를 가질 수있게하려면 (나는 컨트롤러/워커를 호출하기 위해 이전에 마스터/슬레이브 유추를 싫어한다.) 노드는 응답을 보내고 그룹으로 진행 상황을 게시하면 WCF에서 자주 사용되지 않는 P2P 채널을 사용할 수 있습니다. 이렇게하면 WCF로 작성된 서비스 그룹을 거의 동시에 주제/대화 구분 기호와 같은 URL을 사용하는 동료로 서로 이야기 할 수 있습니다.

예를 들어, net.p2p : // labs/commands 채널에서 명령을 실행할 수 있습니다. 컨트롤러 만 해당 채널에서 명령을 보내지 만 모든 작업자 노드는 수신 대기합니다. 비동기식으로 작업을 완료하면 net.p2p : // labs/status 채널에서 진행 상황을보고 할 수 있습니다. 이 방법의 또 다른 이점은 (이 기능이 필요한 경우) 개별 작업자가 다른 모든 작업자가 무엇을하고 있는지 알 수있는 능력을 얻게된다는 것입니다.

그러나 P2P를 사용하는 경우 경합을 처리해야한다는 점에 유의하십시오. 동일한 명령을 수락하는 2 개의 노드로 끝날 수 있습니다. 괜찮 으면 P2P가 귀하의 도구입니다. 커맨드가 발행되고 개별 노드에 의해 연속적으로 픽업 되어야만하는 경우 (원격 노드에게 개별 테스트 스크립트를 실행하도록 지시 할 때와 같은 시나리오) P2P 대신 MSMQ 바인딩을 사용할 수 있습니다. 그러면 모든 직원이 대기열에서 메시지를받는 클라이언트가되며 동일한 요청을 수락하는 여러 작업자의 상황을보다 쉽게 ​​상쇄 할 수 있습니다.

추가 참조 : A blog post I wrote a while back on the Peer Channel.

Peer Channel Scenarios on MSDN - 여기에서 피어 채널 개념에서 참조 가이드로 이동할 수 있기 때문에 좋습니다.

Peer Channel Team Blog

+0

당신은 P2P 프로토콜에 대한 더 많은 정보를 가지고 개정 할 수 있습니까? 아니면 링크를 게시하거나 기사를 선택하기 위해 2 개를 게시 할 수 있습니까? 귀하의 답변에 감사드립니다. – Firoso

+0

일부 P2P 및 피어 채널 참조에 대한 링크를 포함하도록 원래 응답을 수정했습니다. –

+0

대단히 감사합니다! – Firoso

관련 문제