试图从.NET 3.5获取异常代码而没有成功

时间:2019-03-12 09:44:54

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

我有一个Web服务。在一个方法中,我有一个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时,我得到一个null,并且一旦得到一个null,我就尝试转换{{1} }与e.InnerException一样,我也得到null。

以下是我的例外的屏幕截图:

enter image description here

如您所见,这里有一个Win32Exception代码。

1 个答案:

答案 0 :(得分:0)

根据您的屏幕截图,您正在捕获 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...   
}