Я звоню в службу WCF, которая при определенных условиях возвращает AggregateException со всеми проблемами, возникшими в результате вызова
С другой стороны, я получаю FaultException (что имеет смысл,потому что WCF понимает только об этих исключениях).Проблема в том, что Деталь для контракта не является совокупным исключением.По умолчанию WCF получает 1-е исключение для списка исключений AggregateException (InnerExceptions) и инкапсулирует его.Так что на стороне клиента я просто получаю первое исключение из списка.После небольшого исследования я сделал следующее:
Добавил это в контракт
[FaultContract(typeof(AggregateException))]
Затем на сервисный звонок ..
try
{
BaseService.Blabla.Delete(item);
}
catch (AggregateException ex)
{
throw new FaultException<AggregateException>(ex);
}
Но с другойсторона, которая выглядит так:
catch (FaultException<AggregateException> ex)
{
string msg = string.Empty;
foreach (var innerException in ex.Detail.InnerExceptions)
{
msg += innerException + Environment.NewLine;
}
MessageBox.Show(msg);
}
catch (Exception ex)
{
throw ex;
}
Вместо этого он попадает в оператор Exception catch и получает ошибку, подобную этой (которая, очевидно, является некоторой случайной ошибкой, потому что у меня нет проблем с подключением и отладкойэто возвращается немедленно, 4 минуты никогда не проходят):
The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:03:59.9939994'. : An existing connection was forcibly closed by the remote host
Что мне не хватает?