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

本文关键字:消息 原始 属性 替换 自己的 我自己 异常处理 程序块 应用程序 何根 应用 | 更新日期: 2023-09-27 18:00:59

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

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

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

COM异常。错误代码=-1001-->MyLibraryException。ErrorReason=设备错误。输入参数格式错误&MyLibraryException。InnerException=originalCOMException,其中DeviceError是enum&其中,对于COM对象中的每个特定HRESULT,都是明确的DeviceErrormember。

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

感谢

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

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

你没有说你在使用哪个版本的Entlib。如果是5.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的说法,创建自己的异常处理程序会更好。您只需要创建一次exception处理程序,就可以在EL配置中设置一个"COM方法"策略来进行处理。