【问题标题】:System.Net.WebException vs. System.ExceptionSystem.Net.WebException 与 System.Exception
【发布时间】:2014-04-17 17:59:08
【问题描述】:

我正在用 C# 调用一个 SOAP Web 服务

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

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

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

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

我不想为不同的异常使用单独的代码。对于所有类型的异常,只需一个消息框说明“发生错误”就足够了。

【问题讨论】:

  • 我不明白你现在到底想要什么。请解释一下。

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


【解决方案1】:

如果 System.Exception 没有捕捉到异常类型 System.Net.WebException。

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

我不想为不同的异常使用单独的代码。只有一条消息 说明“发生错误”的框对我来说对于所有类型的 例外。

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

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

你可能会看到:Best Practices for Exceptions

【讨论】:

    【解决方案2】:

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

    但是,这样做被认为是不好的做法:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      简单地说,异常会捕获所有派生自异常的对象。

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-28
        • 1970-01-01
        • 2019-10-21
        • 1970-01-01
        相关资源
        最近更新 更多