То, что было общепринятым способом освобождения клиентских прокси WCF в «ранние» дни WCF.
Однако с тех пор все изменилось.Оказалось, что реализация IClientChannel .Dispose () просто вызывает метод IClientChannel .Close () , который может вызвать исключение при некоторых обстоятельствах, например, когда базовый канал не открыт или не может быть закрыт своевременно.
Поэтому не рекомендуется запускать Close()
в блоке catch
, посколькукоторые могут оставить некоторые неизданные ресурсы в случае исключения.
новый рекомендуемый способ - вызвать IClientChannel .Abort () в пределах catch
блокировать вместо этого, на случай, если Close()
потерпит неудачу.Вот пример:
try
{
channel.DoSomething();
channel.Close();
}
catch
{
channel.Abort();
throw;
}
Обновление:
Вот ссылка на статью MSDN, в которой описывает эту рекомендацию .