2009-08-23 5 views
2

Que dois-je utiliser pour la communication bidirectionnelle sur Internet sans la nécessité d'ouvrir les ports côté client?Le plus simple pour la communication bidirectionnelle sur Internet en utilisant C#

Les utilisateurs n'accepteront pas d'ouvrir les ports et de faire la redirection de port côté client, bien que tout soit possible côté serveur.

Mais, je dois accomplir une communication bidirectionnelle ..

Comment puis-je aller sur la réalisation de cela?

Peu importe que ce soit WCF ou services à distance ou webs ... J'ai juste besoin d'un moyen rapide et rapide de faire en sorte que le concept fonctionne et distribue l'application.

Bien sûr, ça va passer par Internet.

S'il vous plaît aider .. Merci

Edit: S'il vous plaît noter que je dois relier plusieurs clients et maintenir une session pour chaque client.

+0

Eh bien, je veux dire, vous pouvez simplement utiliser un site Web. Les gens peuvent avoir des comptes, et ensuite, vous savez, vous envoyer un message :) –

+0

Non, j'ai déjà un client Windows qui communique avec le site Web ... mais maintenant j'ai besoin du site pour commencer à travailler sur le client ... .this est un projet d'architecture distribuée pour le partage de processus sur différentes machines – Josh

Répondre

3

WCF prend en charge les liaisons HTTP bidirectionnelles.

Tant que le client initiateur peut accéder au service, un contrat de rappel peut être défini pour appeler le client. Il conserve simplement la connexion HTTP une fois que le client l'a initié.

+0

mais je pense qu'un port doit être ouvert sur le côté client et la redirection de port est nécessaire ... non? – Josh

+0

Si une machine client peut accéder à un site Web, elle peut également recevoir une réponse d'un service Web. La question est simplement combien de temps il faut avant que la réponse n'arrive chez le client :) C'est ce dont WCF profite: Le client attend patiemment une réponse HTTP du service, et il maintient la connexion ouverte indéfiniment.Puisque la connexion est ouverte, le service peut renvoyer les réponses au client quand cela lui convient. Le bus de service Internet (Azure) fonctionne également de cette façon. –

+0

Y a-t-il un exemple pour cela? J'ai utilisé WCF comme un service Web en ajoutant la référence ... mais comment faire pour que WCF appelle une fonction sur le client chaque fois que nécessaire? – Josh

1

Connectez-vous via TCP (socket brut ou implémentation supérieure) à un serveur central.
Votre serveur doit disposer d'une application qui écoute un port TCP spécifique bien connu.
Chaque client se connecte à votre serveur en utilisant le port spécifique et se connecte.
Écrivez un protocole d'application au-dessus du TCP (authentification, gestion de session, etc.), et là vous l'avez, puisque une connexion TCP, une fois établie, fonctionne pour les deux directions.

+0

HTTP (using TCP) fonctionne de la même manière. Il n'y a aucune raison de prendre une telle approche de bas niveau. –

+0

Je pense que HTTP devrait avoir son timeout, et je ne suis pas sûr que cette limite soit OK par l'OP. –

+1

En outre, le modèle HTTP est une réponse par requête. Je ne peux pas dire si le PO veut «accomplir une communication bidirectionnelle» par une seule réponse à une seule demande. –

2

Cela dépend de ce que vous voulez faire. Duplex WCF peut fonctionner, mais à travers NAT et Proxies, il devient quelque peu "iffy" car il dépend du client ouvrant un point de terminaison WCF et de maintenir la connexion.

J'ai écrit a beginners guide to WCF callbacks il y a quelques temps - c'est assez simple à faire, mais vous aurez besoin de le tester beaucoup, à partir de diverses configurations client.

+0

Votre guide fonctionne-t-il à travers le NAT? Le NAT est mon problème ... Je ne peux pas m'attendre à ce que les utilisateurs de PC normaux configurent la redirection de port. – Josh

+0

s'il vous plaît aider ... tout moyen de sortir de NAT? Teamviewer.com et logmein.com l'ont fait .... pourquoi pas nous après avoir tant de technologies à l'intérieur de .Net? Il n'y a pas de sortie de la boîte? – Josh

+0

Firewalls oui, NAT no. Vous pourriez regarder Teredo et tunneling, mais cela peut être exagéré. TeamViewer et Loginme gardent une connexion TCP ouverte, qui tunnels via NAT - ce n'est pas WCF, ou webservices ou à distance (qui ne joue jamais bien avec les pare-feu) – blowdart

Questions connexes