Dois-je utiliser Named Pipes ou .NET Remoting pour communiquer avec un processus en cours d'exécution sur mon ordinateur ?
Réponses
Trop de publicités?La WCF est le meilleur choix. Il supporte un certain nombre de mécanismes de transport différents ( y compris Nommé Tuyaux ) et peut être entièrement piloté par la configuration. Je vous recommande vivement de jeter un coup d'œil à WCF.
Voici un blog qui fait un Comparaison des performances entre WCF et Remoting .
Une citation du blog :
Les performances de WCF et de .NET Remoting sont vraiment comparables. Les différences sont si faibles (en mesurant la latence du client) qu'il importe peu de savoir lequel des deux est un peu plus rapide. WCF a cependant un bien meilleur débit serveur que .NET Remoting. Si je devais commencer un projet complètement nouveau, je choisirais le WCF. De toute façon, WCF fait beaucoup plus que Remoting et pour toutes ces caractéristiques, je l'aime.
S'il s'agit d'une machine unique, Named Pipes vous offre de meilleures performances et peut être mis en œuvre avec la fonction infrastructure remoteur ainsi que WCF. Ou vous pouvez juste utiliser directement System.IO.Pipes .
Si vous voulez parler 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 Named Pipes sont certainement plus efficaces, mais ils nécessitent la conception d'au moins un protocole d'application de base, ce qui n'est pas toujours réalisable. Le remoting vous permet d'invoquer des méthodes distantes en toute simplicité.
Si vous utilisez le .NET Framework 3.0 ou supérieur, j'utiliserais WCF. Avec WCF, vous pouvez utiliser différentes liaisons en fonction du compromis entre performances/interopérabilité/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 services Web, vous voudrez utiliser la liaison WS-HTTP. Dans votre cas, vous pouvez utiliser WCF avec soit une liaison net-tcp, soit une liaison named-pipe. L'un ou l'autre devrait fonctionner.
Personnellement, je pense que l'approche WCF est plus propre car elle permet de réaliser des services dirigés par contrat et de se concentrer sur les messages et non 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 parce que beaucoup d'informations sémantiques se perdent 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/infrastructures qui composent un seul nœud.