2009-12-04 6 views
1

Existe-t-il un moyen simple d'envoyer des objets entre applications en utilisant C#? Les objets ne seront pas toujours les mêmes, il y aurait (par exemple) une classe "Request" et "Response" et chaque côté de la connexion aurait une sorte d'instruction switch qui déciderait quel objet a été reçu.Mise en réseau TCP simple avec C#

Existe-t-il un moyen simple de réaliser quelque chose comme ça en C# sans avoir besoin de bibliothèques 3'de partie?

Répondre

4

WCF pourrait fonctionner ici, vous avez juste besoin de mettre en place une interface décrivant les objets que vous allez passer. Voici un bon tutoriel sur l'utilisation WCF for interprocess communication.

+0

Cette solution est vraiment rapide et facile à faire. – Russell

2

.NET Remoting fait plus ou moins ce que vous voulez, et vous pouvez utiliser vos classes d'interface que les classes qui font la « instruction switch »

http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspx

+0

Cela fonctionne, mais vous encourez une surcharge (r) importante dans le trafic spatial et réseau. – monksy

+0

.net remoting est un prédécesseur de WCF. Considérer sérieusement utiliser WCF tout en considérant. Remoting .net. La valeur du transport de niveau supérieur, la valeur de la facilité pour les objets de/sérialisation et la prise en charge de l'EDI en dehors de la surcharge. – Russell

+0

(Référence pour le commentaire précédent): http://msdn.microsoft.com/en-us/library/72x4h507%28VS.85%29.aspx – Russell

3

La meilleure façon d'y parvenir sur un réseau TCP brut connexion c'est de créer une DLL qui est référencée par les applications des deux côtés de la connexion. Mettez toutes vos classes de communication dans cette DLL et marquez chaque type comme Serializable. Cela active les objets pour la sérialisation binaire et donc une conversion facile en un byte[] qui peut être passé directement via la connexion TCP.

Si vous avez un peu plus flexbility vous voudrez peut-être envisager quelque chose d'un peu plus haut niveau mais comme Remoting Services ou WCF

+0

La sérialisation via le flux Tcp serait mon premier choix sur Remoting. Et WCF peut être beaucoup plus intense que ce que cette opération nécessite. Dépend de l'utilisation globale, des exigences et/ou des attentes. – IAbstract

2

Si vous n'avez pas besoin d'envoyer l'objet binaire complet (avec des instructions logiques), vous pouvez sérialiser les classes de requête et de réponse à XML et envoyer sur le texte via des flux.

1

La définition de «simple» dépend également de vos besoins. Les fonctionnalités intégrées (par exemple, WCF) ne sont pas classées en tant que bibliothèques tierces et offrent donc un moyen simple d'envoyer des objets en toute sécurité entre applications C#. WCF peut automatiquement générer des proxys pour vous, tout ce que vous avez à faire est de définir vos contrats de données et d'exposer votre service. Vous pouvez ajouter une référence de service dans Visual Studio et les méthodes sont exposées.

Je vais réitérer, cela dépend vraiment de ce que vous voulez faire, pour déterminer quelle est la solution la plus simple.

0

J'essayerais toujours de considérer le problème comme l'envoi de données entre des applications, pas des objets. Les modèles d'objets distribués se terminent presque toujours en larmes, car vous n'avez pas vraiment d'état partagé.