【发布时间】:2011-09-07 18:50:40
【问题描述】:
我正在调用 WCF 服务,它在某些条件下返回 AggregateException,其中包含通过调用发生的所有问题
另一方面,我得到了一个 FaultException(这是有道理的,因为 WCF 只了解这些异常)。问题是,合约的细节不是一个聚合异常。就好像默认情况下,WCF 获取 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
我错过了什么?
【问题讨论】:
-
您是否尝试过通过调试器来确定实际抛出了什么异常?
标签: c# wcf exception-handling