异常处理应用程序块 - 如何根据原始消息的某些属性将原始消息替换为我自己的消息?

时间:2011-07-01 20:29:45

标签: c# .net enterprise-library

我正在创建一个使用聚合(内置)COM对象的类库。此COM对象的方法和属性可能会抛出COMException,其中ErrorCode属性是HRESULT指示COM对象内部逻辑中的错误。

例如,HRESULT(因此,COMException.ErrorCode)= -1001表示特定方法的输入参数格式错误。

我想在我的库中使用异常处理应用程序块,并以下一种方式用我的自定义异常替换带有意义的ErrorCode的COMExceptions:

COMException.ErrorCode = -1001 ---> MyLibraryException.ErrorReason = DeviceError.BadFormatOfInputParam&& MyLibraryException.InnerException = originalCOMException ,其中 DeviceError 是enum&来自COM对象的每个特定HRESULT的明确 DeviceError memeber。

如何使用异常处理应用程序块实现此目的?

由于

2 个答案:

答案 0 :(得分:0)

您需要编写自定义异常处理程序并将其插入块中。

您没有说您正在使用哪个版本的Entlib。如果是5.0或更高版本,请抓住Enterprise Library Extensibility Hands-on labs。关于如何编写自定义异常处理程序的第一个练习。

从那里你只需要实现你的逻辑来做任何你想做的事。

答案 1 :(得分:0)

更简单的方法,但不太理想,是将新异常作为更标准的异常类型抛出。

e.g。对于SOAP异常:

catch (System.Web.Services.Protocols.SoapException soapEx)
{
    throw new Exception("System.Web.Services.Protocols.SoapException"
            + Environment.NewLine 
            + soapEx.Detail.InnerText
        , soapEx);
}

这是不太理想的,因为每次调用COM方法时都需要捕获并重新抛出,换句话说就是大量重复代码。

创建自己的异常处理程序,执行上述操作,因为@Chris Tavares说要好得多。您只需要创建一次excption处理程序,并且可以在执行处理的EL配置中设置“COM方法”策略。