Domanda

Sto per scrivere un " server " applicazione che è responsabile per parlare con hardware esterno. La domanda deve gestire le richieste dei clienti. I client inviano un messaggio al server e se il server è impegnato a fare cose con l'hardware, i nuovi messaggi saranno archiviati in una coda che verrà elaborata in seguito.

Il client deve anche essere in grado di annullare una richiesta (se è nella coda del server.). Al termine dell'applicazione del server con l'hardware, deve essere in grado di inviare il risultato al client che ha richiesto il lavoro.

Le applicazioni server e client potrebbero essere o meno sullo stesso PC. Tutto lo sviluppo è fatto in .NET (C #) 2005.

Quindi, la mia domanda è: qual è il modo migliore per risolvere questo problema di comunicazione?

MSMQ? SAPONE? WCF? Remoting? altro?

È stato utile?

Soluzione

Remoting

Se tutto lo sviluppo viene eseguito in .NET 2005, Remoting è il modo migliore di procedere. http://en.wikipedia.org/wiki/.NET_Remoting

Altri suggerimenti

Supponendo che tu possa usare .NET 3.0 o versioni successive, allora probabilmente vorrai WCF come canale di comunicazione - l'interfaccia è coerente ma ti permetterà di usare un meccanismo di trasporto appropriato a seconda di dove si trovano il client e il server altro - così puoi scegliere di usare SOAP o MSMQ o un formato binario o altri come appropriato (e puoi farlo tu stesso se necessario). Copre anche la necessità di una comunicazione bidirezionale.

L'accodamento dei messaggi sul server dovrebbe probabilmente essere considerato un problema separato, soprattutto vista la necessità di rimuovere i messaggi in coda.

Se i client e i processi del server si trovano sulla stessa macchina, penso che le Named pipe offriranno la velocità di trasferimento in byte grezzi più veloce. Se i processi si svolgono su macchine diverse, è necessario utilizzare l'approccio basato sui socket.

Secondo quanto riferito, il remoting è molto lento. in base ai sistemi operativi di destinazione su cui stai pianificando di implementare la soluzione, potresti avere opzioni come WCF et.all Tuttavia l'overhead di questi protocolli è qualcosa che potresti voler esaminare mentre decidi.

MSMQ avrebbe un senso, anche se ci sono quindi considerazioni sulla sicurezza e sulla distribuzione. Potresti guardare un bus di servizio (come NServiceBus o MassTransit) e c'è anche un Service Broker di SQL Server che potrebbe aiutare (e può anche essere usato da un bus di servizio come trasporto).

WCF sarebbe un'altra cosa da guardare, tuttavia è davvero il trasporto attraverso la rete, quindi probabilmente vorrai comunque che le chiamate WCF inseriscano un messaggio nella coda del server.

Non raccomando il remoting, perché è difficile mantenere una separazione delle preoccupazioni, e prima che tu lo sappia stai sviluppando un'interfaccia davvero loquace senza accorgertene. Le chiamate remote sono costose in termini relativi, quindi dovresti cercare di mantenere i messaggi abbastanza grossolani. WCF sarebbe la mia raccomandazione. Non da ultimo perché puoi configurarlo per utilizzare un trasporto HTTP ed evitare molti problemi di distribuzione e mal di testa.

.NET Framework offre diversi modi per comunicare con oggetti in diversi domini applicativi, ciascuno progettato con un particolare livello di competenza e flessibilità in mente. Ad esempio, la crescita di Internet ha reso i servizi Web XML un interessante metodo di comunicazione, poiché i servizi Web XML sono basati sull'infrastruttura comune del protocollo HTTP e della formattazione SOAP, che utilizza XML. Questi sono standard pubblici e possono essere utilizzati immediatamente con le attuali infrastrutture Web senza preoccuparsi di ulteriori problemi di proxy o firewall.

Non tutte le applicazioni dovrebbero essere create utilizzando una qualche forma di servizio Web XML, tuttavia, se non altro a causa dei problemi di prestazioni relativi all'utilizzo della serializzazione SOAP su una connessione HTTP.

Scelta delle opzioni di comunicazione in .NET ti aiuta a decidere quale forma di comunicazione tra oggetti vuoi per la tua applicazione.

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