我正在创建一个类库,它使用聚合(内置) COM对象。此COM对象的方法和属性可能引发COMException,ErrorCode属性是表示COM对象内部逻辑中的错误的HRESULT。
例如,HRESULT (因此,COMException.ErrorCode) = -1001意味着特定方法的输入参数格式很差。
我希望在我的库中利用异常处理应用程序块,并以下一种方式用自定义异常替换COMExceptions为有意义的ErrorCode:
COMException.ErrorCode = -1001 --> MyLibraryException.ErrorReason = DeviceError.BadFormatOfInputParam & MyLibraryException.InnerException = originalCOMException,其中DeviceError为枚举&其中是COM-object中每个特定HRESULT的确定性DeviceError备忘录。
如何使用异常处理应用程序块来实现这一点?
谢谢
发布于 2011-07-03 06:58:33
您将需要编写一个自定义异常处理程序并将其插入到块中。
您没有说您使用的是哪种版本的Entlib。如果版本为5.0或更高版本,则获取企业图书馆可扩展性动手实验室。关于如何编写自定义异常处理程序的第一个练习。
从这里开始,您只需要实现您的逻辑来做任何您想做的事情。
发布于 2011-07-04 10:20:54
一个更简单的方法,但不那么可取,是抛出一个新的异常作为一种更标准的异常类型。
例如,对于SOAP异常:
catch (System.Web.Services.Protocols.SoapException soapEx)
{
throw new Exception("System.Web.Services.Protocols.SoapException"
+ Environment.NewLine
+ soapEx.Detail.InnerText
, soapEx);
}这不太理想,因为每次调用COM方法时都需要捕获和重新抛出,换句话说,重复代码很多。
创建您自己的异常处理程序,如@Chris所述,执行上述操作要好得多。您只需要创建一次excption处理程序,并且可以在EL配置中设置一个"COM方法“策略来进行处理。
https://stackoverflow.com/questions/6552922
复制相似问题