在COM+(VB)中处理自定义.Net异常

本文关键字:处理 自定义 Net 异常 COM+ VB | 更新日期: 2023-09-27 17:48:49

我即将开始编写一个.Net组件,该组件将从VB COM+服务调用(新组件是一个DLL,它调用Web服务并根据响应返回)。我不知道如何处理调用VB.的.Net代码中可能出现的错误情况

我担心的两种错误是:

  • 如果不满足先决条件,我可能想抛出的异常(例如,作为参数提供的开始日期比作为参数的结束日期晚不到3个月;我可能想引发StartDateNotValidException)
  • 可能作为Web服务调用的一部分发生的异常(超时、404等)

如果出现上述情况,我想向用户返回一些特定的反馈和/或将一些信息记录到日志中。我曾考虑过从.Net代码返回Int返回代码并避免Exceptions,但调用VB的代码最终可能会迁移到.Net,所以如果可能的话,我想使用Exceptions。

我在MSDN上读到COM Interop将自动将标准库异常转换为HRESULT;有人用过这个吗?这可以用来将自定义.Net异常转换为我可以在VB中处理的错误条件吗?

谢谢,Nick

在COM+(VB)中处理自定义.Net异常

我肯定以前看过,但这是我以前的工作,所以我无法查看详细信息。我认为我们从COMException继承了异常类,并设置了正确的ErrorCode(在非托管代码中应翻译为HResult)。这非常好,因为您可以在非托管代码中使用HResult,也可以在托管客户端中正确处理类型化异常。

请告诉我它是否真的有效。

我最终使用了以下方法:

  • 有一本大词典映射我们的特定应用程序VB错误代码到我们的特定于应用程序的C#自定义例外情况
  • 编写一个方法,将C#异常转换为VB错误代码(以及反之亦然)
  • 从包含任何业务的方法返回字符串数组中发生的异常方法调用(目前只有两个)

这样做的原因是,调整异常树以扩展COMException太麻烦了(无论如何,比上面的更麻烦)。因此,我从未尝试过从COMException继承并检查ErrorCode是否正确转换为HResult。

不过,谢谢你的建议,并为没有尝试而道歉。