尝试从 .NET 3.5 获取异常代码但未成功

Posted

技术标签:

【中文标题】尝试从 .NET 3.5 获取异常代码但未成功【英文标题】:Trying to get exception code from .NET 3.5 without success 【发布时间】: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 及更高版本中是可能的...... 【参考方案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。

以上是关于尝试从 .NET 3.5 获取异常代码但未成功的主要内容,如果未能解决你的问题,请参考以下文章

Form.Owner 从 .NET 3.5 中的单独线程设置

尝试从asp.net web api调用获取响应时android studio中的超时异常

mysqli execute() 成功执行但未获取记录[重复]

VUE:获取数据但未使用 vueD3tree 显示

Asp.Net Core 3.1 数据被检索但未保存到数据库中

尝试从URL获取参数时出现异常