У вас есть вся необходимая информация под рукой - получившаяся в результате передовая практика использования и правильного закрытия / отмены всех ваших прокси-клиентов WCF будет:
YourClientProxy clientProxy = new YourClientProxy();
try
{
.. use your service
clientProxy.Close();
}
catch(FaultException)
{
clientProxy.Abort();
}
catch(CommunicationException)
{
clientProxy.Abort();
}
catch (TimeoutException)
{
clientProxy.Abort();
}
Перехват FaultException обрабатывает все случаи, когда служба реагирует на состояние ошибки (и, следовательно, ваш канал находится в состоянии сбоя), и CommunicationException обрабатывает все другие связанные с коммуникацией исключения, которые могут возникнуть, например, сбой подключения к сети и т. Д.
Подход с использованием блока using () не будет работать, поскольку, если в конце блока происходит исключение, когда метод Dispose () вызывает метод Close () на клиентском прокси, у вас нет возможности ловить и обрабатывать это.