【问题标题】:How to allow IErrorHandlers to handle AccessViolationExceptions in WCF?如何允许 IErrorHandlers 处理 WCF 中的 AccessViolationExceptions?
【发布时间】:2011-11-06 22:27:07
【问题描述】:

当然,我们必须避免捕获和尝试处理 AccessViolationExceptions(AVE)。但是,在我目前的情况下,异常是从 COM+ 托管组件引发的,该组件终止引发异常的进程,因此可以正确清理。但是,使用所述 COM+ 组件的托管 WCF 的 Windows 服务会收到冒泡的 AVE,从而导致服务崩溃。

现有的 IErrorHandler 似乎不会触发/检测 AVE。

有什么方法可以让 WCF IErrorHandlers 捕获 AVE?

【问题讨论】:

    标签: c# .net wcf com windows-services


    【解决方案1】:

    作为一种变体,您可以尝试在 AppDomain.CurrentDomain.UnhandledException 上添加一个处理程序,您可以在其中重新启动服务。

    或者,您可以在一个 ('Main')AppDomain 中运行您的主 win_service,并在另一个 ('Sub')AppDomain 中托管 WCF 服务。这样你就可以在不影响主进程的情况下卸载(重新加载)子进程。

    【讨论】:

    • 看,我主要关心的是其他正在进行的 wcf 调用,这些调用基本上由于不同服务上的 EAV 而异常终止。使用这两种方法,我需要强制终止运行我的 WCF 服务的应用程序域。这是我试图避免的。我已经在第一次失败时重新启动服务。
    【解决方案2】:

    IErrorHandlers 无法捕获类似于 AccessViolationExceptions (SEHExceptions) 的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2018-03-31
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多