2014-04-17 47 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的对象。

相关问题