【问题标题】:Handling custom .Net exceptions in COM+ (VB)?处理 COM+ (VB) 中的自定义 .Net 异常?
【发布时间】:2023-04-08 07:07:01
【问题描述】:

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

我担心的两种错误是:

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

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

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

谢谢, 尼克

【问题讨论】:

    标签: c# vb.net com interop com-interop


    【解决方案1】:

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

    如果它真的有效,请告诉我。

    【讨论】:

      【解决方案2】:

      我最终使用了以下方法:

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

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

      感谢您的建议,但很抱歉没有尝试一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多