Domanda

sto sviluppando un modello di comando master-slave con cui alcune applicazioni "Master" invia comandi ai processi omogenei chiamati "Slave" di fare qualche operazione e poi rispondere di nuovo con lo stato completo fallimento o di processo. essi dovrebbero anche esporre alcuni dati al master sono disponibili su richiesta.

Cosa sarebbe questo modello simile in WCF?

sarebbe Maestro e ogni istanza di ospite Schiavo appenderci propri servizi? sarebbe Maestro unico host? solo schiavo? Dovrei usare Contratti richiamata? Contratti dati? o contratti di servizio solo.

Come nota, questa è una larghezza di banda bassa, bassa intensità, del progetto di distribuzione interna utilizzati per test di prodotto e non devono essere considerati come un progetto "grande richiesta è alta".

È stato utile?

Soluzione

Sarà sicuramente contratti di servizio - un must - in una forma o nell'altra. Questo solo definisce il vostro servizio e le operazioni (metodi) su di esso (OperationContract).

Se si tratta di un sistema interno "behind-the-firewall", si poteva guardare un duplex vincolante, per esempio avere la chiamata master Slave, e la relazione schiavo schiena su un canale duplex quando è fatto. Fuori dalla scatola, c'è solo la WsDualHttpBinding per supportare su due piani, ma visto che sei interna, dietro-the-firewall, si potrebbe desiderare di guardare a creare vincolante il proprio duplex basato su TCP (non è così difficile come potrebbe sembrare a prima!).

In questo scenario, entrambe le applicazioni coinvolte sono veramente server e client allo stesso tempo.

Si dovrà DataContracts in qualche modo, forma o forma per definire i dati che si sta spostato tra master e slave -. Quindi, di nuovo, sì, si dovrà avere contratti dati

EDIT: Naturalmente, un altro approccio potrebbe essere quello di utilizzare due code di messaggi MSMQ; il Maestro lascia cadere la richiesta di "lavoro" in una coda, che lo Slave in ascolto su e prende la richiesta di lavoro. Quando la Schiavo è fatto, a sua volta cade una risposta nella coda di risposta al quale il Master è un ascoltatore, e viene notificato del lavoro svolto in quel modo.

Marc

Altri suggerimenti

Sono d'accordo con Jeremy qui .. Quello che stai descrivendo non ha bisogno la complessità dei contratti di callback. I nodi lavoratore potrebbe semplicemente esporre un servizio WCF (o anche un servizio Web WSDL o di riposo per quella materia ...) e poi il controller sarebbe semplicemente bisogno di conoscere gli URL di ciascuno dei nodi figlio e inviare messaggi ai nodi dei lavoratori.

Se si desidera che il controller sia in grado di trasmettere un unico messaggio e hanno tutti del lavoratore (che piace davvero l'analogia master / slave ... Tempo fa ho passato a chiamarlo regolatore / lavoratore) nodi fare qualcosa in risposta e inviare i loro progressi di nuovo al gruppo, allora si potrebbe desiderare di utilizzare il canale P2P spesso sottovalutato disponibili all'interno di WCF. Questo consente a un gruppo di servizi scritti in WCF per parlare tra di loro tutti in una volta come peer con gli URL utilizzati quasi come separatori di argomento / conversazione.

Quindi, per esempio, è possibile eseguire i comandi sul net.p2p: // LAB / comandi canale. Solo il controller invia i comandi su quel canale, ma tutti i nodi dei lavoratori ascoltare. Quando hanno finito di fare le loro cose in modo asincrono, si possono segnalare i progressi di nuovo sul net.p2p: // laboratori / Stato canale. Un ulteriore vantaggio di questo approccio è che (se avete bisogno di questa funzione), i singoli lavoratori avrebbero acquisire la capacità di conoscere ciò che tutti gli altri lavoratori stanno facendo.

Tenete presente, tuttavia, che se si utilizza il P2P allora avrete a che fare con l'affermazione - si può finire con 2 nodi di accettare lo stesso comando. Se questo va bene, allora il P2P è il tuo strumento. Se avete bisogno di comandi da emettere e prese solo fino in serie da nodi individuali man mano che diventano liberi (uno scenario più probabile quando dice nodi remoti di eseguire gli script di test individuali, ecc), allora è possibile utilizzare un MSMQ vincolante invece di P2P. Poi tutti i lavoratori diventano clienti che ricevono i messaggi dalla coda e si può più facilmente contrastare la situazione di più lavoratori accettare la stessa richiesta.

Per ulteriore riferimento: un post che ho scritto un po 'indietro sul canale peer .

Scenari Canale Peer su MSDN - Questo è un bene perché si può andare da qui a Peer concetti di canale per la guida di riferimento.

Peer Canale Blog del team

Se il trattamento degli schiavi ci vorrà molto tempo, quindi i contratti di callback potrebbe essere in ordine. In caso contrario, si può solo bloccare nel Master in attesa per lo slave per completare (potrebbe essere necessario regolare la configurazione del client WCF in modo che esso non timeout).

Sulla base della sua descrizione, penso che saresti davvero solo bisogno di ospitare il servizio WCF sui nodi Slave e il Maestro potrebbe essere solo un cliente consumando i servizi WCF esposti da Slave.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top