2011-07-01 32 views
0

我正在创建一个使用聚合(内置)COM对象的类库。此COM对象的方法和属性可能会抛出COMException,其中ErrorCode属性为HRESULT,表示COM对象的内部逻辑中存在错误。异常处理应用程序块 - 如何根据原始消息的某些属性用我自己的原始消息替换原始消息?

例如,HRESULT(和因此COMException.ErrorCode)= -1001意味着特定方法的输入参数格式不正确。

我想利用异常处理应用程序块在我的图书馆,并在接下来的方式我的自定义异常更换有意义的错误码COMExceptions:

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

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

感谢

回答

0

你需要编写自定义异常处理程序,并把它插入到该块。

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

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

0

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

例如对于一个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 Method”策略。

相关问题