Dois-je utiliser des canaux nommés ou .NET Remoting pour communiquer avec un processus en cours sur ma machine?
WCF est le meilleur choix. Il prend en charge n certain nombre de mécanismes de transport différents ( y comprisNomméPipes ) et peut être entièrement piloté par la configuration. Je vous recommande fortement de jeter un œil à WCF.
Voici un blog qui fait un comparaison des performances WCF vs Remoting .
Une citation du blog:
Les WCF et .NET Remoting sont vraiment comparables en termes de performances. Les différences sont si faibles (mesure de la latence du client) qu'il importe peu de savoir laquelle est un peu plus rapide. WCF a cependant un débit de serveur bien meilleur que .NET Remoting. Si je voulais commencer un tout nouveau projet, je choisirais le WCF. Quoi qu'il en soit, la WCF fait beaucoup plus que Remoting et pour toutes ces fonctionnalités, je l'adore.
Si c'est sur une seule machine, Named Pipes vous offre de meilleures performances et peut être implémenté avec infrastructure distante ainsi que WCF. Ou vous pouvez simplement utiliser directement System.IO.Pipes .
Si vous parlez de communication inter-processus, j'ai utilisé .NET Remoting sans aucun problème jusqu'à présent. Si les deux processus sont sur la même machine, la communication est assez rapide.
Les canaux nommés sont certainement plus efficaces, mais ils nécessitent la conception d'au moins un protocole d'application de base, ce qui pourrait ne pas être possible. La communication à distance vous permet d'appeler facilement des méthodes distantes.
Si vous utilisez le .NET Framework 3.0 ou supérieur, j'utiliserais WCF. En utilisant WCF, vous pouvez utiliser différentes liaisons en fonction du compromis entre performance/interop/etc. dont vous avez besoin.
Si les performances ne sont pas critiques et que vous avez besoin d'interopérabilité avec d'autres technologies de service Web, vous souhaiterez utiliser la liaison WS-HTTP. Dans votre cas, vous pouvez utiliser WCF avec une liaison net-tcp ou une liaison nommée pipe. Soit devrait fonctionner.
Mon opinion personnelle est que l'approche WCF est plus propre car vous pouvez faire des services pilotés par contrat et vous concentrer sur les messages, pas sur les objets (je fais ici une généralisation basée sur les modèles de programmation par défaut de WCF/.NET Remoting). Je n'aime pas envoyer des objets à travers le fil car beaucoup d'informations sémantiques sont perdues ou ne sont pas claires. Lorsque tout ce que vous faites est d'envoyer un message comme vous le faites avec WCF, il devient plus facile de séparer vos préoccupations entre la communication et les classes/infrastructure qui composent un seul nœud.
La communication à distance dans .NET Framework 2.0 fournit le canal IPC pour la communication interprocessus au sein de la même machine.
WCF offre également une flexibilité. En changeant simplement une configuration (liaison), vous pouvez avoir le même service sur une autre machine au lieu de IPC sur la même machine. Par conséquent, votre code reste flexible.
La communication à distance .Net n'est pas un protocole en soi. Il vous permet de choisir le protocole à utiliser: SOAP, tubes nommés, etc.
.net remoting est intégré à .net pour effectuer la communication du processus interne. Si vous l'utilisez, ils continueront de le prendre en charge et éventuellement de l'améliorer dans les futures versions. Les canaux nommés ne vous donnent pas la promesse d'améliorations dans les futures versions de .net