Die kurze Antwort ist, dass Sie bei Webdienst-Proxyklassen diese schließen und nicht entsorgen sollten.
In fast allen Fällen sollten Sie Dinge entsorgen, die IDisposable. Web Service Proxy-Klassen sind jedoch ein Sonderfall. Bei diesen Klassen, und allen Klassen, die von System.ServiceModel.ClientBase
ist es eine bewährte Praxis pas dispose aufzurufen, sondern die Close-Methode direkt aufzurufen.
Anhand des Reflektors können Sie sehen, dass die Dispose
Methode der ClientBase
ruft einfach Close
. Wenn es also keine Ausnahmen gibt, Dispose
y Close
wird das Gleiche tun. Wenn es jedoch eine Ausnahme gibt, wird es unterschiedliche Verhaltensweisen geben.
Weil die Close
Methode Ausnahmen auslösen kann, sollten Sie sie direkt aufrufen und ihre Ausnahme abfangen. Wenn Sie die Dispose
Methode, sollten Sie auch die Ausnahmen abfangen, aber Ihr Code wird schwerer zu verstehen sein.
Das bedeutet auch, dass Sie vermeiden sollten, die Deklaration des Proxys in eine using
Erklärung. In diesem Fall, wenn eine Ausnahme in der using
Block, wird er verdeckt. Die Website Dispose
Aufruf, der automatisch von der using
Block wird aufgerufen, weil er sich in einem finally
Block. Die Ausnahme, die von der Close
im Dispose
wird die zuvor ausgelöste Ausnahme überdecken.
Ausführlichere Erklärungen finden Sie in den folgenden Artikeln auf MSDN , Coding Up Style , BlogginAbout.Net y StackOverflow .
Die Hintergründe, warum es auf diese Weise umgesetzt wird, finden Sie in diesem Thread auf der MSDN-Foren .