10

有没有办法在 ASP.NET 中处理错误“WebDev.WebServer.Exe 已停止工作”并保持页面运行甚至只是 WebServer 运行?或者这是一项不可能完成的任务,本质上就像在询问如何在某人死后挽救他们的生命?

我在 try/catch 块中有导致错误的代码,但这并没有什么不同。我也尝试注册一个新的 UnhandledExceptionEventHandler,但这也不起作用。我的代码如下,以防我做错了什么。

另外要明确的是,我并不是在寻求有关如何防止错误的帮助;我想知道是否以及何时发生错误,如果我能做些什么来处理它。

更新 1:TestOcx 是一个 VB6 OCX,它将字符串的引用传递给用Clarion编写的 DLL 。

更新 2:根据@JDennis 的回答,我应该澄清该catch(Exception ex)块也没有被输入。如果我从try\catch块中删除了对 OCX 的调用,它仍然无法到达该UnhandledException方法。基本上有两个领域永远不会被执行。

更新 3:来自@AndrewLewis,我还尝试添加一个常规catch块来捕获任何不符合 CLS 的异常,但这也不起作用。但是,我后来发现,从 .NET 2.0 开始,所有非 CLS 异常都包含在RuntimeWrappedException其中,因此 acatch (Exception)也会捕获不符合 CLS 的异常。在此处查看其他问题以获取更多信息。

public bool TestMethod()
{
    AppDomain.CurrentDomain.UnhandledException +=
        new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    string input = "test";
    string result = "";
    try
    {
        TestOcx myCom = new TestOcx();
        result = myCom.PassString(ref input); // <== MAJOR ERROR!
        // do stuff with result...
        return true;
    }
    catch (Exception ex)
    {
        log.Add("Exception: " + ex.Message); // THIS NEVER GETS CALLED
        return false;
    }
}

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    // THIS NEVER GETS CALLED
    try
    {
        Exception ex = (Exception)e.ExceptionObject;
        log.Add("Exception: " + ex.Message);
    }
    catch (Exception exc)
    {
        log.Add("Fatal Non-UI Error: " + exc.Message);
    }
}
4

2 回答 2

1

您应该尝试捕获不符合 CLS 的异常,以确保没有抛出任何异常(请记住,您不想在生产中执行此操作,请始终保持具体!):

try
{
    TestOcx myCom = new TestOcx();
    result = myCom.PassString(ref input); // <== MAJOR ERROR!
    // do stuff with result...
    return true;
}

catch (Exception ex)
{
    log.Add("Exception: " + ex.Message); // THIS NEVER GETS CALLED
    return false;
}
catch
{
   //do something here
}
于 2013-05-28T20:18:36.063 回答
0

您的代码显示为//THIS NEVER GETS CALLED

如果您捕获到异常,则不再对其进行处理。这就是为什么它不会触发 unhandledexception 事件。

于 2013-05-28T18:31:51.063 回答