2017-05-09 43 views
0

我有一個WCF服務與WebApi進行通信。當我的WCF拋出一個自定義的異常,例如AutoMapperMappingException將異常序列化回WebApi時,我得到一個ReadFault,因爲WebApi沒有安裝Automapper。保存堆棧跟蹤時更改異常類型

現在這是一個普遍的問題,可以發生在任何第三方庫,所以我不想在WebApi上安裝第三方庫。

有沒有一種方法可以在保留堆棧跟蹤的同時更改異常的類型。

我願做這樣的事情(每個異常都需要它自己的定製實現,但沒關係):

public void ThrowKnownException(AutoMapperMappingException ex) 
{ 
    var message = FormatMessage(ex); 

    var knownException = new Exception(message); 
    knownExcpetion.StackTrace = ex.StackTrace; 

    throw knownException; 
} 

這是行不通的,因爲你無法分配堆棧跟蹤。有誰知道一個乾淨的方式來做到這一點?

編輯: 添加一個內部例外是行不通的,因爲WCF仍然需要序列內異常的WebAPI,這將創造一個讀取故障

+0

您是否反對將其添加爲內部異常? – Lithium

+0

@Lithium是的,添加一個內部異常不會工作,因爲內部異常也需要被序列化回 –

回答

0

您可以使用重載的構造爲包裝你的異常如的InnerException

Exception Overload

+0

這不會工作內部異常也會被序列化,這將創建一個讀取錯誤 –

+0

在我看來,你永遠不應該返回出於安全考慮,WCF響應中的異常堆棧。在任何生產服務中,不建議拋出公開堆棧的異常。 – Gururaj

+0

同意了,我們在我們的WebApi上有一個機制,它過濾用戶從異常中看到的權限。這隻能由某些用戶在內部看到 –