2008-09-12 7 views
10

L'utilisation de WSDualHttpBinding pour les rappels bidirectionnels fonctionnerait-elle dans des scénarios réels? Dites, j'ai une application .NET qui utilise un port aléatoire, le service serait capable de résoudre les adresses de base du client et le port pour les rappels?WSDualHttpBinding pour les rappels duplex

Répondre

35

Une réponse complète à votre question dépend du «scénario du monde réel», qu'il s'agisse d'un scénario Intranet ou Internet. Bien que WSDualHttpBinding fonctionne dans les deux scénarios, il y a des détails à connaître:

Intranet

WSDualHttpBinding travaillera avec votre application .NET à l'aide d'un port personnalisé préconfiguré dans un scénario Intranet et « Oui » le service sera capable de résoudre les adresses de base du client et le port pour les rappels: exactement comment est expliqué ci-dessous. La raison pour laquelle cela est expliqué ci-dessous est que WSDualHttpBinding est principalement conçu pour être utilisé sur Internet.

Les rappels bidirectionnels dans un scénario Intranet lorsque vous pouvez utiliser WCF sur le client et le serveur sont mieux réalisés en utilisant NetTcpBinding ou NetNamedPipeBinding. Ces liaisons utilisent respectivement TCP et ICP comme moyen de transport (plutôt que HTTP) et un codage binaire personnalisé, ce qui explique pourquoi le format WCF est requis des deux côtés. Pour les appels au client, le même canal que celui utilisé pour se connecter au Service via la liaison est réutilisé sans qu'un nouveau port ne soit ouvert.

Internet

Dans le cas d'Internet valide les requêtes HTTP et des réponses ne se déplacent dans une direction, HTTP est réalisé sous forme d'un protocole à sens unique. Lorsque vous utilisez WSDualHttpBinding WCF crée donc un canal HTTP distinct pour les rappels. En réponse à votre deuxième question: l'adresse de destination de ce rappel au client est composée par défaut du nom d'hôte de la machine cliente et du port 80. Si le client est une machine de développement par exemple et que IIS est installé, le port 80 sera exclusivement réservé dans certains scénarios, ce qui provoquera des conflits avec votre application prototype. C'est ce que this blog post présente une solution pour et à quoi la propriété ClientBaseAddress est conçue pour aider. Quel que soit le port utilisé (par défaut ou personnalisé), vous devez vous assurer que tous les pare-feu et routeurs des deux côtés sont correctement configurés pour permettre l'établissement du canal sortant et du canal de rappel séparé. Une application .NET peut également désigner une application Silverlight. En raison du fait qu'une application Silverlight fonctionnant dans un navigateur ne peut pas accepter de nouvelles connexions HTTP entrantes, WSDualHttpBinding avec son canal de retour séparé ne fonctionnera pas. Par conséquent, PollingDuplexHttpBinding a été créé d'abord dans Silverlight 2, ce qui peut être considéré comme une astuce pour contourner le fait que HTTP est unidirectionnel en gardant le canal de requête ouvert longtemps (longue interrogation) et en l'utilisant comme canal arrière pour rappelle au client. Cela a un certain nombre d'implications à la fois sur le côté client et sur le serveur, particulièrement pertinentes pour la mise à l'échelle. Pour plus de détails, voir this post from my blog.

Avec une idée de votre «scénario du monde réel» et de vos cas d'utilisation, nous espérons que cela vous aidera à établir la liaison correcte à utiliser pour les rappels duplex.

+0

Très informatif +1 –

2

Si c'est une application derrière un pare-feu, théoriquement oui. Cela dépend de ce que vous entendez par "monde réel"; si par cela vous voulez dire "haute performance" peut-être NetTcpBinding est une meilleure approche.

Questions connexes