首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理应用程序块-如何根据原始消息的某些属性替换原始消息?

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

Stack Overflow用户
提问于 2011-07-01 20:29:44
回答 2查看 468关注 0票数 0

我正在创建一个类库,它使用聚合(内置) 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备忘录。

如何使用异常处理应用程序块来实现这一点?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2011-07-03 06:58:33

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

您没有说您使用的是哪种版本的Entlib。如果版本为5.0或更高版本,则获取企业图书馆可扩展性动手实验室。关于如何编写自定义异常处理程序的第一个练习。

从这里开始,您只需要实现您的逻辑来做任何您想做的事情。

票数 0
EN

Stack Overflow用户

发布于 2011-07-04 10:20:54

一个更简单的方法,但不那么可取,是抛出一个新的异常作为一种更标准的异常类型。

例如,对于SOAP异常:

代码语言:javascript
复制
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方法“策略来进行处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6552922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档