2008-12-18 3 views
1

J'ai un client et un serveur écrits en .net 3.5 donc je n'ai aucun problème d'interopérabilité.Pouvez-vous réaliser une communication bidirectionnelle cryptée en utilisant WCF lorsque le client peut être derrière un proxy, un pare-feu ou un NAT?

Le serveur est entièrement accessible sur le port 443 (je l'héberge pour que je puisse ouvrir d'autres ports si nécessaire)

Le client est cependant moins accessible. Il est souvent derrière un pare-feu d'entreprise, ou derrière un NAT, ou utilise un proxy http/https pour se connecter à Internet.

Je dois établir une communication bidirectionnelle cryptée entre le client et le serveur.

Les deux canaux bidirectionnels fournis dans WCF ne semblent pas faire l'affaire:

  • NetTcpBinding ne semble pas soutenir les proxies HTTP (source)

  • WSDualHttpBinding exige que le client a un URI public qui fournit un point de terminaison de rappel pour le service, ce qui n'est malheureusement pas le cas ici (source)

WCF peut-il établir ce type de connexion bidirectionnelle cryptée (en utilisant silencieusement le tuner https si nécessaire), sans régler les paramètres de pare-feu/proxy du côté client?

+0

Que voulez-vous dire par «communication bidirectionnelle»? Le serveur devrait-il être capable d'envoyer une demande non-sollicitée au client, ou simplement une réponse "synchrone"? – Arnout

+0

Unsollicited. En d'autres termes, le serveur devrait être capable d'invoquer une méthode de rappel sur le client. Il est possible de truquer en utilisant des réponses synchrones (appelées polling), mais cela a des inconvénients évidents (latence, performance) – Brann

+0

Je ne peux pas imaginer qu'un pare-feu classique supportera le scénario non-sollicité ... Je pense que c'est-à-dire que les connexions sont toujours initiées par le client) est votre meilleur pari. – Arnout

Répondre

0

Oui. Vous pouvez utiliser WSDualHttpBinding ou NetTcpBinding.

+0

WSDualHttpBinding ne fonctionnera pas avec un pare-feu et NetTcpBinding ne fonctionnera pas avec un proxy. J'ai édité la question initiale pour fournir plus de détails sur ces questions. – Brann

0

Un pare-feu raisonnable devrait permettre ce genre de comportement. Comme la communication est initiée par le client, un pare-feu avec état permet au canal de communication de rester ouvert, mais uniquement entre les deux points de terminaison connus.

1

Vous recherchez une technologie appelée Comet. Wikipedia entry Si vous "Google comet wcf" vous trouverez des articles qui devraient vous diriger dans la bonne direction.

+0

En effet, ce que je cherche est une mise en œuvre WCF de Comet. Les versions existantes (NetTcpBinding et WSDualHttpBinding) ne fonctionnent pas dans certains scénarios proxy/pare-feu. J'ai recherché sur Google "comet wcf" mais je n'ai trouvé que des gens qui cherchaient une telle implémentation, ou qui essayaient d'en construire une. – Brann

+0

Hmm, désolé, vous avez raison. Que diriez-vous de ce lien? http://www.codeproject.com/KB/WCF/WCFFormHosting.aspx?fid=1532167&df=90&mpp=25&noise=3&sort=Position&view=Quick –

+0

Ce lien décrit ce que fait NetTcpBinding (il est en effet très bien pour la communication bidirectionnelle, comme mentionné dans mon premier message). Cependant, ce canal ne semble pas fonctionner correctement avec les proxies. – Brann

0

J'ai trouvé quelques informations intéressantes here

Fondamentalement, on peut éditer le fichier app.config comme ceci:

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy bypassonlocal="False" proxyaddress="http://gateway:8080" /> 
    </defaultProxy> 
</system.net> 

Je ne suis pas sûr que cela fonctionne pour NetTcpBinding, bien que l'article affirme qu'il fonctionne pour les liaisons personnalisées. Je vais essayer et vous laisser savoir ce qui s'est passé.

MISE À JOUR: il ne fonctionne pas (la configuration defaultProxy ne fonctionne que pour les requêtes http et https)

0

J'ai un même besoin, et j'ai vu cet article sur la fonction Comet-esque qu'ils ont fourni pour Silverlight 2 sur WCF: Silverlight Polling Duplex. Je ne l'ai pas encore essayé, mais je pense que l'assembly construit sur le bureau peut également inclure les classes client, si c'est le cas, cela peut être utilisable en dehors de Silverlight.

Editer: J'ai vérifié les deux assemblages et ils implémentent tous les deux les mêmes liaisons et canaux, il ressemble au même code que celui créé pour le framework de bureau; Vous devriez donc pouvoir utiliser l'assemblage "Serveur" dans une application de bureau.

0

Selon this answer J'ai obtenu pour une question similaire, .NET v4 fonctionne à travers un NAT avec la classe WSDualHttpBinding. Votre question a été posée il y a quelques années, donc ce n'était pas une option pour vous alors ...

Questions connexes