1

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

我担心的两种错误是:

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

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

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

谢谢,尼克

4

2 回答 2

1

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

请让我知道它是否真的有效。

于 2008-11-06T15:43:55.637 回答
0

我最终使用了以下方法:

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

这样做的原因是修改我们的异常树来扩展 COMException 太麻烦了(反正比上面的更麻烦)。因此,我从未尝试过从 COMException 继承并检查 ErrorCode 是否正确转换为 HResult。

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

于 2008-11-20T16:55:04.560 回答