web-dev-qa-db-fra.com

Communication à deux sens entre serveur et clients

Situation: Nous avons une application Web exécutée sur un serveur. Cette application doit récupérer des données à partir d'un autre PC (clients), qui sont sur un réseau différent.

Sur le PC des clients, il existe des WCF hébergés dans Windows Services en utilisant sa DB SQL locale. Je veux faire une communication recto verso entre serveur et clients pour partager des données les unes avec les autres. Partager des données Stand Stage Share Tableau de données, Set de données, String, etc. entre clients et serveur.

Problème:

1) Je n'ai pas de contrôle sur le pare-feu, proxy, NAT sur le PC côté client. La plupart des employés de la société ont beaucoup de sécurité réseau, par exemple le pare-feu, par exemple le pare-feu. Circulation ICMP et Certains portent également, certains routeurs peuvent être désactivés du transfert de ports, etc., etc., etc., le client peut changer de lieu de réseau. Je ne veux pas faire de réglage sur le routeur côté client, le proxy, le pare-feu. Pendant la communication Comment puis-je gérer ce genre de problème du côté client? Comme vous savez que Skype fonctionne parfaitement dans cette situation.

les pare-feu bloquent très souvent les connexions entrantes aux clients; Le client peut ne pas être accessible à partir du serveur, il peut utiliser NAT Traduction derrière un routeur et ne peut donc pas être contacté sans transfert de port étant configuré sur le routeur et un nouveau transfert de port de routeur désactivé.

2) sur le côté des clients, il n'y a pas IIS.

Je ne veux pas autoriser l'accès à distance sur les clients PC.

Il y a plus de 100 clients et un seul serveur. Un serveur doit communiquer avec de nombreux clients sur différents réseaux.

) Un côté mon application client utilise la fenêtre Application de fenêtre et WCF hébergé dans le service de fenêtre, d'une autre côté sur mon serveur, j'utilise une application Web. Donc, sa communication moyenne est entre bureau PC et Web PC, c'est-à-dire.

Si les deux utilisent une application Web, il n'était donc pas émettant de la communication en duplex.parce que je sais que webrtc est en forme là-bas lol.

Technologie que j'avais déjà testé et trouvée problème

wsdualhttpbinding: ne fonctionne pas si le client derrière NAT.

MSMQ: sa mauvaise technique si les clients plus de 1 et problème de performance sont également parce que son utilisation RAM Memory.

xsocket: Il ne fonctionne pas non plus si le bloc de trafic ICMP par pare-feu sur le client.

WEBRTC: Son travail bien mais son support Web à la communication Web .as mon côté client, j'ai gagné une application.

Socket.io: Son besoin de configurer Node.js et beaucoup d'autres choses, difficiles à mettre en œuvre car j'ai besoin de mettre en œuvre sur l'application existante, je ne fais pas de nouvelle application.

Programme de socket C #: Cela ne fonctionne pas si le client et rompre sur différents réseaux.

Relais de bus de service: Ce n'est pas libre même pour les tests.

SocketPro: J'ai étudié Je trouve sa bonne mais je ne trouve aucun échantillon de bon sens sur Google .so que je pourrais tester cela.

Chiffres authentiques: Je ne trouve aucun échantillon sur Google.

Continuons à SignalR Numéro que je get.: Server i Excourez une application de la console et du côté client I Exécutez deux applications, une console et d'autres sites Web. Quand j'exécutais une application client Console Console qu'il ne s'agissait pas de connexion avec serveur, mais lorsque j'utilisais une application client Web, cela fonctionnait bien. Je ne peux pas comprendre pourquoi thas ??

S'il vous plaît dites-moi ce qui est le meilleur moyen le plus sûr et le moyen rapide de gérer cette situation? Quelle approche dois-je utiliser?

Merci d'avance .

3
Tariq_ASp.net

Cela peut être fait en utilisant un contrat de rappel WCF.

Si le client peut effectuer une connexion au serveur, le serveur peut utiliser un service WCF avec une construction callback. Cela décrit que le serveur s'attend à ce que le client implique également un service (le service de rappel), dans le cadre du contrat de service.

Ce bec descendu comme suit:

  1. Le serveur héberge un service WCF.
  2. Le contrat de service a un attribut CallbackContract:

    [ServiceContract(CallbackContract = typeof(IMyServiceCallback))]

  3. Les clients qui souhaitent utiliser ce service doivent implémenter le contrat de rappel souhaité (service) pour pouvoir communiquer avec le serveur.

  4. Lorsqu'un client se connecte avec le service côté serveur, la connexion inverse/rappel sera effectuée sur la même connexion.

L'utilisation de rappels est effectuée sur la même connexion (qui a déjà été ouverte). Cela nécessite un canal de communication à double sens (par exemple http).

Voir http://adamprescott.net/2012/08/15/a-simple-wcf-service-callback-example/ Pour un exemple de mise en œuvre.

1
oɔɯǝɹ