【问题标题】:Trying to get exception code from .NET 3.5 without success尝试从 .NET 3.5 获取异常代码但未成功
【发布时间】:2019-08-02 17:48:51
【问题描述】:

我有一个网络服务。在一个方法中,我有一个 try-catch 块。然后在里面,我想获取异常代码。

我在下面尝试过:

catch (Exception e){  
    var w32ex = e as Win32Exception;
    if(w32ex == null) {
        w32ex = e.InnerException as Win32Exception;
    }    
    if(w32ex != null) {
        int code =  w32ex.ErrorCode;
        // do stuff
    }    
    // do other stuff   
}

...这已解释为here,但在我的情况下,它不起作用:当将异常 e 转换为 Win32Exception 时,我得到一个空值,一旦我得到一个空值,我尝试将 e.InnerException 转换为 @987654326 @ 我也得到了 null。

下面是我的例外截图:

如您所见,有一个HResult 代码。

【问题讨论】:

  • 可能是异常不是 Win32Exception 类型(或派生自)?
  • @hormberg 抛出的异常属于 System.Web.Services.Protocols.SoapException 类型。如何从中获取错误代码?
  • var v = e.HResult;
  • @hormberg 我正在使用 NET 3.5,但无法访问它。我知道这在 NET 4.5 及更高版本中是可能的......

标签: c# web-services exception visual-studio-2008 .net-3.5


【解决方案1】:

根据您的屏幕截图,您正在捕获 SoapException 的实例:https://docs.microsoft.com/en-us/dotnet/api/system.web.services.protocols.soapexception?view=netframework-3.5 此类不继承自 Win32Exception,这就是类型转换运算符返回 null 的原因。您应该能够直接从基础 Exception 类中获取 HResult 字段(根据文档,即使在 .Net 3.5 中):

catch (Win32Exception w32ex)
{  
    // Put your current code here...
}
catch (Exception ex)
{
    int hResult = ex.HResult;
    // Handle HRESULT error code here...   
}

【讨论】:

  • 你能提供一个关于如何获取错误代码的代码 sn-p 吗?我试过没有成功。
  • @user1624552 为什么需要这个“错误代码”?你想在这里捕捉什么?
  • 因为只有在抛出这种类型的错误时我才需要做一些事情。异常可以相同,但错误代码可以不同。所以我需要准确识别错误代码是什么。
  • .. 是的,你是对的,抛出的异常是 System.Web.Services.Protocols.SoapException 类型,那么我怎样才能从那里获取错误代码?
  • @user1624552 我在答案中添加了代码 sn-p。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 2017-03-20
  • 2014-05-11
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多