Метод Close для объекта ICommunicationObject может генерировать два типа исключений, поскольку MSDN выделяет здесь. Я понимаю, почему метод Close может вызывать эти исключения, но я не понимаю, почему метод Dispose на прокси-сервере службы вызывает метод Close без попытки его использования. Разве ваш метод Dispose не является единственным местом, где вы хотите, чтобы вы не выбрали никаких исключений?
Закрытие и удаление службы WCF
Ответ 1
Кажется, это общий шаблон проектирования в .NET-коде. Вот цитата из Принципы проектирования рамок
Рассмотрим метод предоставления Close(), в дополнение к Dispose(), если close - стандартная терминология в области. При этом важно, чтобы реализация Close была идентична Dispose...
Вот сообщение , в котором вы можете найти обходной путь для этой проблемы с конструкцией System.ServiceModel.ClientBase
Ответ 2
Да, обычно Dispose - это одно из мест, которое вы хотите, чтобы исключения не были выбраны. Однако на основе этого сообщения MSDN были некоторые исторические причины такого поведения. Таким образом, рекомендуемым шаблоном является парадигма try {Close}/catch {Abort}.