2014-04-17 60 views
0

我在C#中System.Net.WebException與System.Exception的

調用SOAP Web服務,我使用的try-catch趕上由Web服務調用拋出的所有異常。將下面的代碼:

try 
{ 
    Webservice.Method(); 
} 
catch (Exception) 
{ 
    //Code 
} 

能夠捕獲所有異常,包括基於網絡的異常,如Web服務不可用,未連接互聯網,錯誤響應代碼等,或者我應該也使用Catch(WebException)的System.Exception如果沒有捕獲異常, System.Net.WebException類型。像:

try 
{ 
    Webservice.Method(); 
} 
catch (WebException) 
{ 
    //Code for web based exceptions 
} 
catch (Exception) 
{ 
    //Code 
} 

我不想爲不同的例外單獨代碼。只有一個消息框指出「發生錯誤」對我來說足以滿足所有類型的異常。

+0

我不明白你到底想要什麼。請解釋。 –

回答

3

如果System.Exception不能捕獲類型爲 的異常System.Net.WebException。

System.Exception將趕上由於System.ExceptionWebException是一個基類。

我不想爲不同的例外單獨代碼。只有一條消息 框中指出「發生錯誤」對於所有類型的 例外情況都足夠好。

在這種特定的情況下即使是空的catch程序塊就足夠了(除了在System.Exception的捕捉)。但通常這是不算好的做法

try 
{ 
    Webservice.Method(); 
} 
catch 
{ 
    // Show error 
} 

您可能會看到:Best Practices for Exceptions

+2

針對例外的最佳做法鏈接。 –

1

的例外是基本實現所有異常的,任何.NET異常類型必須從Exception類繼承。根據MSDN:

此類是所有例外的基類。發生錯誤時,系統或當前正在執行的應用程序通過拋出一個包含錯誤信息的異常來報告錯誤。拋出異常後,它由應用程序或默認的異常處理程序處理。

但是,您通常希望遵循最佳做法,不要捕捉如Exception這樣廣泛的類別。檢查here for some good guidelines:

但實際上,有些時候,如果代碼執行失敗,您真的不關心它是否失敗,您只是想知道它是否失敗。但是,如果你不關心如何或失敗的原因,你會想要檢查你的代碼,看看你是否需要調用。

簡單地說,異常會捕獲所有派生自Exception的對象。

相關問題