我正在创建一个使用聚合(内置)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。
如何使用异常处理应用程序块实现此目的?
由于
答案 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方法”策略。