Question

J'ai besoin d'aide pour résoudre un problème auquel je suis confronté à une communication avec un client de bureau avec le service WCF hébergé sur IIS.
Ce que je suis en train de faire dans mon cas de test:

  1. Server héberge un service de WSDualHttpBinding
  2. Client établit une connexion (appels Enregistre une méthode) en fournissant à son uri de rappel qui contient l'adresse IP du client
  3. Une fois la connexion établie, une page Web est lancée par l'application cliente. Types d'utilisateurs un peu de texte dans la zone de texte et clique sur Envoyer. La page Web envoie le texte à tous les clients de bureau enregistrés.

Numéro:
À l'étape 2, un PC peut avoir plusieurs adresses IP (adaptateur Ethernet, adaptateurs rebouclage etc). Si lors de l'appel d'inscription, une adresse IP de cette liste est envoyée dans l'URL de rappel qui ne peut pas être appelé à partir du serveur (par exemple un adaptateur IP loopback), une exception de délai d'attente est levée. Après quelques telles tentatives, le serveur ne peut accepter plus d'appels de clients (que ce soit IP valide ou non). Parfois exception « serveur trop occupé » a été levée.

(je ne peux pas utiliser le nom complet de la machine dans le uri de rappel en raison de DNS / WINS problèmes de configuration provoque le serveur à ne pas résoudre le nom de la machine à l'adresse IP correcte).

Comment reproduire:
 une. Publier le serveur sur IIS. À partir d'une autre machine avec plusieurs adresses IP, exécutez le client. Le client envoie des exceptions et sorties délai d'attente du programme après 3 essais  b. Un paramètre dans le App.Config permet un à taper dans l'adresse IP droit (IP à utiliser). Maintenant, si le programme est lancé, tout fonctionne bien.
 c. Si je supprime cette adresse IP spécifiée ci-dessus afin qu'une IP incorrecte est utilisée, pas encore un arrive. Exécutez les programmes 2-3 fois dans ce mode.
 ré. Effectuez les modifications à l'étape b et exécuter le programme. Parfois, je reçois une exception de délai d'attente. D'autres fois, le site Web arrive. Toutefois, lorsque du texte est saisi et envoyé, il ne vient pas au client. (La méthode de registre a travaillé même si le service Web n'a reçu aucun appel. Fonction d'envoi échoue car il n'y a pas de clients enregistrés sur le service Web.

Je ne sais pas exactement pourquoi cela se produit et comment y remédier. Voici ma solution Visual Studio - http://bit.ly/atKfOS

très reconnaissants des contributions, commentaires. Environnement: Serveur - Windows XP (IIS 5), Windows Server 2008 SP2 64 bits (IIS 7), Client: Windows XP

Merci GC

Était-ce utile?

La solution

Eh bien, je suppose que le principal problème est la suivante:. Lorsque le serveur essaie de rappeler au client et échoue, le canal entre les deux deviendra « faillé », et rendu inutile

Après un tel événement se produit, vous devez disposer du proxy côté client, et le recréer - ou grâce gérer l'exception de délai d'attente sur le serveur (attraper, la transformer en une faute SOAP, connectez-il - tout - tout don » laissez pas la TimeoutException .NET sans filtre passe au client, cela faute du canal).

Que faites-vous de votre côté serveur lorsqu'un tel TimeoutException arrive? Faites-vous sûr de ne pas bouillonner cette exception tout le chemin jusqu'à la chaîne ??

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top