2009-09-13 14 views
3

На основе документации и статей рекомендуется вызвать Abort() на прокси-сервере клиента, если возникла непредвиденная ошибка/ошибка. Смотрите следующее (упрощенно):Может ли вызов Abort() прокси-сервера IClientChannel выдавать исключение?

MyServiceClient proxy = null; 
try { 
    proxy = new MyServiceClient(); 
    proxy.DoSomething(); 
    proxy.Close(); 
} catch (Exception ex) { 
    if (proxy != null) 
     proxy.Abort(); 
} 

Есть ли возможность вызова Abort() выбрасывания самого исключения? Должен ли вызов Abort() быть в пределах собственной попытки/улова?

+0

Почему у вас есть нулевая проверка в этом фрагменте? –

+1

Я хотел поставить экземпляр прокси-сервера в блок try. Таким образом, нулевая проверка в случае, если что-то пойдет не так с созданием. Может быть, слишком много, но уверяет, что у меня есть прокси-сервер Abort. – Elan

ответ

3

Нет, Прерывание не сработает (но .Close() или .Dispose() может). Вызов .Abort() - это метод «кувалды» для завершения канала - он просто срывается, независимо от текущей обработки сообщений.

Используйте его только тщательно - например. в случае сбоя исключения при вызове .Close() не удалось. Это настоящая цель и правильное использование.

Marc

+2

Что произойдет, если вы не вызвали прерывание по каналу в вышеупомянутом блоке catch? –

+2

Канал между клиентом и сервером не будет надлежащим образом закрыт и удален, поэтому у вас потенциально будет неиспользуемый канал в вашей системе. В конце концов, это будет сбор мусора - но это займет некоторое время, и до тех пор он использует системные ресурсы без какой-либо полезной цели. –

+0

Есть ли у вас ссылки на резервную копию этого заявления? Я хочу быть уверенным, что Abort никогда не бросит никаких исключений ни при каких обстоятельствах. –