Question

Je suis sur le point d'écrire un "serveur". application qui est responsable de parler avec du matériel externe. L'application doit gérer les demandes des clients. Les clients envoient un message au serveur. Si le serveur est occupé à effectuer des opérations matérielles, les nouveaux messages doivent être stockés dans une file d'attente qui sera traitée ultérieurement.

Le client doit également pouvoir annuler une demande (si celle-ci se trouve dans la file d'attente du serveur). Une fois que l’application serveur est terminée avec le matériel, elle doit pouvoir renvoyer le résultat au client qui a demandé le travail.

Les applications serveur et client peuvent être ou ne pas être sur le même PC. Tout le développement est fait en .NET (C #) 2005.

Ma question est donc la suivante: quel est le meilleur moyen de résoudre ce problème de communication?

MSMQ? SAVON? WCF? Remoting? autre?

Était-ce utile?

La solution

Remoting

Si tous les développements sont réalisés dans .NET 2005, la communication à distance est la meilleure solution. http://en.wikipedia.org/wiki/.NET_Remoting

Autres conseils

En supposant que vous puissiez utiliser .NET 3.0 ou une version ultérieure, vous souhaiterez probablement utiliser WCF comme canal de communication. L’interface est cohérente, mais elle vous permet d’utiliser un mécanisme de transport approprié en fonction de la relation entre le client et le serveur. autre - vous pouvez donc choisir d’utiliser SOAP, MSMQ, un format binaire ou d’autres, selon le cas (et éventuellement, lancez le vôtre si nécessaire). Il couvre également le besoin de communication bidirectionnelle.

La mise en file d'attente des messages sur le serveur doit probablement être considérée comme un problème distinct, en particulier compte tenu de la nécessité de supprimer les messages en file d'attente.

Si les processus client et serveur se trouvent sur le même ordinateur, je pense que les canaux nommés vous donneront le taux de transfert d'octets brut le plus rapide. Si les processus concernent différentes machines, vous devrez utiliser une approche basée sur les sockets.

La communication à distance serait très lente. En fonction des systèmes d’exploitation cibles sur lesquels vous envisagez de déployer la solution, vous pouvez disposer d’options telles que WCF et.all. Toutefois, il est peut-être intéressant de prendre en compte la surcharge de ces protocoles lors de votre décision.

MSMQ aurait un sens, bien qu’il y ait ensuite des considérations de sécurité et de déploiement. Vous pouvez regarder un bus de service (tel que NServiceBus ou MassTransit) et SQL Server Service Broker peut vous aider (et peut également être utilisé par un bus de service comme transport).

WCF est une autre chose à examiner, mais il s’agit en réalité du transport sur tout le réseau. Vous voudrez donc probablement que les appels WCF mettent un message dans la file d’attente du serveur.

Je ne recommande pas l'accès distant, car il est difficile de maintenir une séparation des problèmes. Avant de vous en rendre compte, vous développez une interface très bavarde sans vous en rendre compte. Les appels à distance coûtent cher en termes relatifs, vous devriez donc essayer de garder les messages assez grossiers. WCF serait ma recommandation. Notamment parce que vous pouvez le configurer pour utiliser un transport HTTP et éviter beaucoup de problèmes de déploiement et de sécurité.

.NET Framework offre plusieurs moyens de communiquer avec des objets appartenant à différents domaines d’application, chacun étant conçu avec un niveau particulier d’expertise et de flexibilité. Par exemple, la croissance d’Internet fait des services Web XML un moyen de communication attrayant, car ils reposent sur l’infrastructure commune du protocole HTTP et sur le formatage SOAP, qui utilise XML. Ces normes sont publiques et peuvent être utilisées immédiatement avec les infrastructures Web actuelles sans se soucier des problèmes supplémentaires de proxy ou de pare-feu.

Toutes les applications ne doivent pas nécessairement être créées à l'aide d'un service Web XML, à cause des problèmes de performances liés à l'utilisation de la sérialisation SOAP via une connexion HTTP.

Choix des options de communication dans .NET vous aide à choisir la forme de communication interobjet souhaitée pour votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top