2013-04-11 16 views
10

Sto progettando un'architettura client-server implementata tramite Windows Communication Foundation. In uno dei casi d'uso, il server necessita di richiesta lo stato dei client, il che significa che è necessario chiamare il metodo SendStatus() sul client e chiedere il relativo stato. Mi stavo chiedendo se questo caso d'uso può essere implementato usando WCF, senza creare un servizio standalone sul lato client. Sto cercando di evitare i socket perché il client è un servizio in background ed è essenzialmente sempre connesso al server. Capisco che WCF alla fine usi socket per la comunicazione, ma sto specificatamente cercando di usare WCF visto che è più simile a una proof of concept.Comunicazione bidirezionale utilizzando WCF

Una soluzione ho pensato è stata che il cliente potrebbe chiamare il metodo SendClientStatus() sul servere inviare il suo stato ogni 5 secondi o giù di lì. Ma poi di nuovo questo non sembra un buon approccio. Qualsiasi aiuto sarebbe apprezzato.

+4

Si chiama comunicazione duplex. [Articolo MSDN] (http://msdn.microsoft.com/en-us/library/ms731064.aspx) – J0HN

risposta

9

Nel mondo di WCF, si hanno più o meno due opzioni.

A) A Duplex service with Dual Http Binding

B) Uno schema di polling non ritorno valore - questo è essenzialmente quello che hai descritto. L'implementazione ingenua, come si nota correttamente, non è eccezionale, ma ci sono ottimizzazioni. Dal momento che non hai bisogno di nulla restituito da SendClientStatus (corretto?), Puoi ottimizzare la comunicazione inviando un aggiornamento solo quando ce n'è uno - ad es. finché lo stato del client rimane lo stesso, non viene inviato nulla al server. A seconda della frequenza con cui cambia lo stato del client, questo può ridurre notevolmente il traffico. I servizi duplex presentano alcune configurazioni aggiuntive che si desidera evitare a meno che non siano realmente necessarie.

Problemi correlati