Umgang mit WCF-Dienst neu starten, auf client-Seite
Habe ich ein GUI-client, der läuft gegen eine WCF gehosteten Dienste als Windows-Dienst auf einem server-box. Der WCF-Dienst ausgeführt wird, in PerCall InstanceContextMode, und der client hat eine singleton-Instanz des service-client und ich möchte vermeiden, reinstantiating die singleton-auf jeden Anruf, denn es macht das Leben schwer für viele asynchrone Aufrufe, die ich habe.
Das problem für mich ist, nach der Windows-Dienst neu gestartet wird, jedesmal, wenn der client macht einen Aufruf, es wird ein exception-Meldung wie dieser:
Dieser Kanal kann nicht mehr verwendet werden, um Nachrichten zu senden, wie die Ausgabe-Sitzung automatisch geschlossen wegen einer server-initiierten shutdown. Entweder deaktivieren Sie das automatische schließen durch die Einstellung der DispatchRuntime.AutomaticInputSessionShutdown auf false ein, oder ändern Sie ggf. den shutdown-Protokoll mit dem remote-server.
Was ist der beste Weg, dies zu umgehen? Ich kann try-catch-Klauseln um alle Aufrufe an den service-client und instanziieren Sie die singleton-Instanz auf Kommunikation Ausnahmen aber das wird beinhalten eine Menge boilerplate-code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den am besten zu vermeiden, die Ausnahmen auf dem server alle zusammen. Wenn eine WCF-Server auf eine Ausnahme, die nicht abgefangen und behandelt, es wird "Fehler" der Kanal, wodurch Sie nutzlos.
Auf der server-Seite implementieren können, die IErrorHandler-Schnittstelle und fangen .NET-Ausnahmen, verwandeln Sie sich in SOAP-Fehler, die übergeben werden an den client zurück mehr ordnungsgemäß, ohne Fehler im Kanal.
Diese Weise, können Sie alle fangen .NET-Ausnahmen auf dem server, und konvertieren Sie Sie in eine interoperable SOAP-Fehler, die diese Probleme nicht verursachen.
Weitere Informationen finden Sie unter:
Können Sie einen Blick auf diese vielleicht vermeiden, dass boilerplate-code:
http://wcfproxygenerator.codeplex.com