У меня есть серия служб WCF, которые снова вызывают методы на клиенте (используя WcfDuplexChannels) на основе событий на стороне сервера.Тем не менее, кажется, что могут возникнуть некоторые исключения, поэтому сейчас у меня есть огромный блок try / catch вокруг каждой строки, обращающейся к клиенту, заканчивающейся отключением события в случае возникновения какого-либо исключения.Помимо того, что каждый раз писать неудобно, Я не уверен, смогу ли я упростить блок try catch, перехватывая всего несколько базовых исключений? Сейчас мне все равно, что вызывает исключения (я не понимаюМне все равно, с ошибкой, с ошибкой, с удалением или с тайм-аутом), но я регистрирую разные исключения.
Я также читал о IErrorHandler, но будет ли это на самом деле подходящим при вызове метода на клиенте?
Вот пример моей текущей стратегии:
private void OnProductChanged(List<DTO> products)
{
try
{
client.OnProductChanged(products);
return;
}
catch (TimeoutException)
{
log.Info("Communication to client timed out.");
}
catch (CommunicationObjectAbortedException)
{
log.Info("Connection to client is in aborted state.");
}
catch (CommunicationObjectFaultedException)
{
log.Info("Connection to client is in faulted state.");
}
catch (CommunicationException ce)
{
log.InfoFormat("CommunicationException occured on product change notification: {0}.", ce.Message);
}
catch (ObjectDisposedException)
{
log.Info("Communication channel is disposed.");
}
catch (Exception e)
{
log.WarnFormat("Unhandled {0} on client callback: {1}", e.GetType(), e.Message);
}
SendProductChanged = false;
}
Строка SendProductChanged = false;
позаботится об отмене привязки обработчика события.