Frage

Ich brauche Hilfe in ein Problem zu lösen Ich bin vor einem mit der Kommunikation eines Desktop-Client mit WCF-Dienst auf IIS gehostet.
Was ich versuche in meinem Test-Fall zu tun:

  1. Server-Hosts ein WSDualHttpBinding Service
  2. stellt Client eine Verbindung (ruft Register-Methode) auf dem durch seinen Rückruf uri bereitzustellen, die die Client-IP-Adresse enthält
  3. Sobald die Verbindung hergestellt ist, eine Web-Seite wird von der Client-Anwendung gestartet. Benutzertypen etwas Text in das Textfeld ein und klickt auf Senden. Die Webseite sendet den Text an alle registrierten Desktop-Clients.

Ausgabe:
In Schritt 2 kann ein PC mehrere IP-Adressen (Ethernet-Adapter, LoopbackAdapter usw.). Wenn bei der Registrierung Anruf, eine IP aus dieser Liste in dem Rückruf gesendet wird, url, die nicht vom Server aufgerufen werden können (zum Beispiel Loopback-Adapter IP), wird eine Timeout Ausnahme ausgelöst. Nach ein paar solche Versuche kann der Server keine Anrufe von Kunden akzeptieren mehr (ob gültige IP oder auf andere Weise). Manchmal Ausnahme „Server zu-busy“ geworfen wurde.

(Ich kann nicht in der Maschine ist voll qualifizierte Namen in dem Callback-uri verwendet aufgrund DNS / WINS-Konfigurationsprobleme verursachen den Server nicht nicht lösen Computernamen in der richtigen IP-Adresse).

Wie zu reproduzieren:
 ein. Veröffentlichen Sie den Server auf IIS. Von einem anderen Rechner mit mehreren IP-Adressen, führen Sie den Client. Der Client führt Timeout Ausnahmen und Programm beendet, nachdem 3 Versuche  b. Ein Parameter in der App.Config erlaubt es in der richtigen IP-Adresse (IP zu verwenden). Nun, wenn das Programm gestartet wird, funktioniert alles einwandfrei.
 c. Wenn ich diese IP-Adresse entfernen oben angegeben, so dass eine falsche IP verwendet wird, wieder Schritt a passiert. Führen Sie die Programme 2-3 mal in diesem Modus.
 d. Nehmen Sie Änderungen vor, wie in Schritt b und das Programm auszuführen. Manchmal habe ich eine Timeout Ausnahme. Andere Zeiten, kommt die Website auf. Allerdings, wenn Text eingegeben wird und gesendet wird, ist es nicht an den Kunden kommen. (Das Register Methode funktionierte, obwohl Web-Service keinen Anruf erhalten hat. Senden-Funktion fehlschlägt, da es keine Clients auf dem Web-Service registriert sind.

Ich bin mir nicht sicher, warum genau dies geschieht und wie es zu lösen. Hier ist meine Visual Studio Lösung - http://bit.ly/atKfOS

schätzen alle Eingaben, Kommentare. Umwelt: Server - Windows XP (IIS 5), Windows Server 2008 SP2 x64 (IIS 7), Client: Windows XP

Danke GC

War es hilfreich?

Lösung

Nun, ich denke, das Hauptproblem ist dies:., Wenn der Server versucht, den Client zurückrufen und fehlschlägt, der Kanal zwischen den beiden wird „bemängelt“, und unbrauchbar gemacht

Nach solch ein Ereignis geschieht, müssen Sie die Client-Seite Proxy entsorgen, und neu erstellen - oder graziös die Timeout-Ausnahme auf dem Server verarbeiten (fangen es, schalten Sie ihn in einen SOAP-Fehler, melden Sie es - was auch immer - nur don‘ t ließ die ungefilterte .NET Timeout an den Client zurück, dieser Kanalfehler wird).

Was Sie auf Ihrer Server-Seite tun, wenn solch ein Timeout passiert? Sind Sie sicher, nicht zu sprudeln diese Ausnahme des ganzen Weg bis zum Kanal ??

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top