Frage

Ich habe eine GUI-Client bekam, die gegen läuft ein WCF Dienste als Windows-gehosteten Dienst auf einem Server-Box. Der WCF-Dienst wird in PerCall InstanceContextMode ausgeführt wird, und der Kunde hat eine Singleton-Instanz des Service-Client und ich möchte reinstantiating die Singleton bei jedem Aufruf zu vermeiden, wie es das Leben schwer für die vielen asynchronen Anrufe macht ich habe.

Das Problem für mich ist, nach der Windows-Dienst neu gestartet wird, jedes Mal wenn der Kunde einen Anruf es eine Ausnahmemeldung wie folgt erhält:

  

Dieser Kanal kann nicht mehr verwendet werden, um Nachrichten als Ausgabe Sitzung zu senden war automatisch geschlossen wegen einer serverinitiierte Abschaltung. Entweder deaktivieren Auto-In nächster Nähe des DispatchRuntime.AutomaticInputSessionShutdown auf false gesetzt, oder prüfen, das Shutdown-Protokoll mit dem Remote-Server zu ändern.

Was ist der beste Weg, dies zu umgehen? Ich kann try-catch-Klauseln um alle Client die Anrufe an den Dienst gestellt und die Singleton-Instanz auf Kommunikation Ausnahmen Reinstanziierung aber das wird eine Menge Standardcode beinhalten ..

War es hilfreich?

Lösung

Am besten wäre es, die Ausnahmen auf dem Server alle zusammen zu vermeiden. Wenn ein WCF Server eine Ausnahme trifft, die nicht gefangen und behandelt wird, wird es „Störung“ den Kanal, es unbrauchbar wird.

Auf der Serverseite können Sie implementieren die IErrorHandler Schnittstelle und fangen .NET Ausnahmen sie in SOAP-Fehler, die mehr drehen handed zurück an den Client elegant sein wird, ohne den Kanal zu Verwerfungen.

Auf diese Weise können Sie alle .NET-Ausnahmen auf dem Server zu fangen, und wandeln sie in interoperable SOAP-Fehler, die diese Probleme nicht verursacht.

Weitere Informationen finden Sie unter:

Andere Tipps

Sie können an dieser einen Blick darauf werfen, um vielleicht einige dieser vorformulierten Code zu vermeiden:

http://wcfproxygenerator.codeplex.com

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