System.Net.WebException与System.Exception

时间:2014-04-17 17:59:08

标签: c# .net web-services try-catch system.net.webexception

我在C#中调用SOAP Web服务

我正在使用try-catch来捕获Web服务调用抛出的所有异常。请问以下代码:

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

能够捕获所有异常,包括基于Web的异常,例如Web服务不可用,互联网未连接,错误的响应代码等,或者如果System.Exception没有捕获System.Net类型的异常,我还应该使用Catch(WebException) .WebException。像:

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

我不希望针对不同的异常使用单独的代码。只有一个消息框说明“发生了错误”对我来说对所有类型的异常都足够了。

3 个答案:

答案 0 :(得分:3)

  

如果System.Exception没有捕获类型的异常   System.Net.WebException。

System.Exception将捕获WebException,因为System.Exception是基类。

  

我不希望针对不同的异常使用单独的代码。只有一条消息   框说明"发生错误"对我来说对各种类型都足够好   异常。

在这种特殊情况下,即使是空的catch块也足够(除了捕获System.Exception)。但通常情况下不被视为良好做法

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

您可能会看到:Best Practices for Exceptions

答案 1 :(得分:1)

try { ... } catch (Exception) { ... }块将捕获任何类型的所有异常,因为它是.NET中的基本/根异常类型。

然而,这被认为是不好的做法:

http://msdn.microsoft.com/en-us/library/ms182137.aspx

答案 2 :(得分:1)

异常是所有异常的基本实现,任何.NET异常类型都必须从Exception类继承。根据MSDN:

  

此类是所有异常的基类。发生错误时,系统或当前正在执行的应用程序通过抛出包含错误信息的异常来报告错误。抛出异常后,它将由应用程序或默认异常处理程序处理。

但是,您通常希望遵循不能捕获如Exception这样广泛类别的最佳做法。检查here for some good guidelines:

实际上,有些时候你真的不在乎,如果代码执行失败,你只想知道它是否失败。但是,如果您不关心它失败的方式或原因,您可能需要检查您的代码,看看您调用的内容是否是必需的。

简单地说,异常将捕获从Exception派生的所有对象。