我有一个wcf服务,我现在已经做了一个更改,以便在它们出现在列表中时继续编译我的异常,并最后将此列表作为错误响应抛出。现在单个错误很好。我能够抛弃它并获得输出。但是将列表作为错误抛出证明是有点挑战性的。
- 我到目前为止尝试过:使用AggregateException。我试着嗅探正确的实施。到目前为止,想出了这个:
throw new AggregateException("Multiple Errors Occured", ExceptionsList)
此外,
List<CustomExceptionObject> ThrowException(List<CustomExceptionObject> ExceptionList)
{
AggregateException eggExp = new AggregateException(ExceptionList);
throw new eggExp;
}
我一直使用这些方法得到Unhandled Exception错误。 任何见解都表示赞赏。
更新:我不断收到的错误消息是 -
An exception of type 'System.AggregateException' occurred in XYZ.dll but was not handled in user code.
请记住,抛出CustomExceptionObject的单个对象会在SOAP UI中引发正确的错误响应。我似乎无法提取这些例外的清单。
答案 0 :(得分:2)
您可以使用此模式:
public void DoStuff()
{
var ex = new List<Exception>();
try
{
DoSomethingThatThrowsFooException();
DoSomethingElseThatThrowsFooException();
DoSomethingThatThrowsBarException();
}
cath(FooException e)
{
ex.Add(e);
}
if (ex.Count>0)
throw new AggregateException(ex);
}
BarException
不会被捕获,也不会包含在AggregateException
中。最终,如果没有在其他任何地方被抓住,它可能会导致UnhandledException
。
答案 1 :(得分:1)
聚合异常是抛出异常集合的正确方法。
throw new AggregateException("Multiple Errors Occured", ExceptionsList)
答案 2 :(得分:0)
所以我用黑客克服了这个问题。我不确定这是不是最好的方式。但为了达到我需要的理想结果,这很好用。
第1步:
创建一个属性为List<CustomExceptionObject>
类型的类。
第2步:
现在,当您必须抛出异常时,请使用传入列表设置此属性,
并将其转换为FaultException
类型,并添加一些虚拟FaultReason
和FaultCode
。
throw new FaultException<ListOfExceptionsClass>(listofExceptions, new FaultReason("Here is the List of All exceptions"), Faultcode);
这将在响应中给出一个故障对象,其中列出了所有发生的异常。