如何立即抛出List <customexceptionobj>异常

时间:2017-06-27 12:16:12

标签: c# asp.net .net visual-studio wcf

我有一个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中引发正确的错误响应。我似乎无法提取这些例外的清单。

3 个答案:

答案 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类型,并添加一些虚拟FaultReasonFaultCode

throw new FaultException<ListOfExceptionsClass>(listofExceptions, new FaultReason("Here is the List of All exceptions"), Faultcode);

这将在响应中给出一个故障对象,其中列出了所有发生的异常。