0

我在 C# 中调用 SOAP Web 服务

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

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

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

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

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

4

3 回答 3

3

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

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

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

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

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

您可能会看到:异常的最佳实践

于 2014-04-17T18:03:11.480 回答
1

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

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

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

于 2014-04-17T18:03:31.230 回答
1

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

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

但是,您通常希望遵循不捕获异常这样广泛的类别的最佳实践。在这里查看一些好的指南:

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

简而言之,异常将捕获从异常派生的所有对象。

于 2014-04-17T18:09:51.697 回答