2017-06-27 50 views
0

我有一個wcf服務,現在我做了一個更改,以便在出現在列表中時對我的異常進行編譯,並最終將此列表作爲錯誤響應。現在單個錯誤是好的。我能夠拋出並得到輸出。但把這個列表作爲一個錯誤被證明是有點困難的。如何一次性拋出一個List <CustomExceptionObj>異常

- 我到現在爲止嘗試過:使用AggregateException。我試着嗅探一下適當的實施。到目前爲止,想出了這個:

throw new AggregateException("Multiple Errors Occured", ExceptionsList) 

此外,

List<CustomExceptionObject> ThrowException(List<CustomExceptionObject> ExceptionList) 
{ 
AggregateException eggExp = new AggregateException(ExceptionList); 
throw new eggExp; 
} 

我不斷收到使用這些方法未處理的異常錯誤。 任何洞察力表示讚賞。

UPDATE:我不斷收到錯誤消息是 -

An exception of type 'System.AggregateException' occurred in XYZ.dll but was not handled in user code. 

請記住,我扔的CustomExceptionObject單個對象拋出SOAP UI適當的錯誤響應。我似乎無法拉出這些例外的清單。

+0

「未處理的異常」的消息是什麼? –

+0

未處理的是當你沒有嘗試/抓住任何地方,並且它到達棧頂 – Bond

回答

0

聚合異常是拋出異常集合的正確方法。

throw new AggregateException("Multiple Errors Occured", ExceptionsList) 
+3

這是一個評論不是答案 – BugFinder

+0

請分享實施? – Abhid

+0

我用Abhid的實現對它進行了更新。聚合異常是拋出異常集合的正確方法。 –

0

您可以使用此模式:

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

+0

我似乎正在做這樣的事情,但我得到的例外。我可能做錯了什麼。嘆息... – Abhid

+0

我的猜測是你沒有捕捉正確的例外類型 – Hintham

+0

我想拋出異常列表。這發生在我的處理程序方法中。 – Abhid

0

所以我用黑客克服了這個問題。我不確定這是否是最好的方式。但爲了達到我需要的理想結果,這很好。

步驟1: 創建一個屬性爲List<CustomExceptionObject>類型的類。

第2步: 現在,當你不得不拋出一個異常,與輸入列表設置此屬性, 並投它作爲FaultException型,配有一些虛擬FaultReasonFaultCode

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

這將在響應中給出一個故障對象,並列出所有發生的異常。

+0

希望這可以幫助有類似問題的人。 – Abhid

+1

對於未來的任何人來說,請記住,必須在服務器和客戶端之間的公共庫或契約中定義'ListOfExceptionClass'。理想情況下,您不會返回服務異常,因爲您正在公開服務信息 - 但FaultException是在WCF中將異常返回給客戶端的正確方法。 – ColinM