Schließen und Entsorgen eines WCF-Dienstes
-
09-06-2019 - |
Frage
Der Close
Methode auf einem ICommunicationObject
kann zwei Arten von Ausnahmen auslösen, wie in MSDN beschrieben Hier.Ich verstehe, warum das Close
Die Methode kann diese Ausnahmen auslösen, aber ich verstehe nicht, warum das so ist Dispose
Die Methode auf einem Dienst-Proxy ruft die auf Close
Methode ohne a try
um es herum.Ist das nicht deins? Dispose
Methode an der einzigen Stelle, an der Sie sicherstellen möchten, dass Sie keine Ausnahmen auslösen?
Lösung
Es scheint ein gängiges Entwurfsmuster im .NET-Code zu sein.Hier ist ein Zitat von Richtlinien zur Rahmengestaltung
Erwägen Sie die Bereitstellung der Methode Close() zusätzlich zu Dispose(), wenn „Close“ in diesem Bereich die Standardterminologie ist.Dabei ist es wichtig, dass Sie die Close-Implementierung mit der Dispose-Implementierung identisch machen ...
Hier ist ein Blogeintrag Hier finden Sie eine Problemumgehung für dieses System.ServiceModel.ClientBase-Entwurfsproblem
Andere Tipps
Ja, normalerweise ist Dispose einer der Orte, an denen Sie sicherstellen möchten, dass keine Ausnahmen ausgelöst werden.Basierend jedoch auf dieser MSDN Forenthread Es gab einige historische Gründe für dieses Verhalten.Daher ist das empfohlene Muster das try{Close}/catch{Abort}-Paradigma.