Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “处理错误”;WebDev.WebServer.Exe已停止工作;_C#_Asp.net_Error Handling - Fatal编程技术网

C# “处理错误”;WebDev.WebServer.Exe已停止工作;

C# “处理错误”;WebDev.WebServer.Exe已停止工作;,c#,asp.net,error-handling,C#,Asp.net,Error Handling,是否有办法处理ASP.NET中的错误“WebDev.WebServer.Exe已停止工作”,并保持页面运行,甚至只是Web服务器运行?或者,这是一项不可能完成的任务,本质上就像是在问一个人死后如何拯救他的生命 我在try/catch块中有导致错误的代码,但这没有什么区别。我还尝试注册了一个新的未处理的ExceptionEventHandler,但也没有成功。我的代码如下,以防我做错了什么 同样要明确的是,我不是在寻求如何防止错误的帮助;我想知道错误是否发生以及何时发生,我是否可以做些什么来处理它

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

我在try/catch块中有导致错误的代码,但这没有什么区别。我还尝试注册了一个新的未处理的ExceptionEventHandler,但也没有成功。我的代码如下,以防我做错了什么

同样要明确的是,我不是在寻求如何防止错误的帮助;我想知道错误是否发生以及何时发生,我是否可以做些什么来处理它

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

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

更新3:在@AndrewLewis中,我还尝试添加一个常规的
catch
块来捕获任何不符合CLS的异常,但这也不起作用。然而,我后来发现,自从.NET2.0启用以来,所有非CLS异常都被包装在
RuntimeWrappedException
中,因此
catch(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);
    }
}
public bool TestMethod()
{
AppDomain.CurrentDomain.UnhandledException+=
新的未处理ExceptionEventHandler(CurrentDomain_UnhandledException);
字符串输入=“测试”;
字符串结果=”;
尝试
{
TestOcx myCom=新的TestOcx();
结果=myCom.PassString(参考输入);//
您的代码读取//这永远不会被调用


如果捕获到异常,它将不再被取消处理。这就是它不会触发未处理异常事件的原因。

您应该尝试捕获不符合CLS的异常,以确保不会抛出任何异常(请记住,您不希望在生产中这样做,请始终保持特定!):

试试看
{
TestOcx myCom=新的TestOcx();

result=myCom.PassString(ref-input);//您从电视上拔下插头,试图观看一个节目。TestDll在做什么,它来自哪里,它是什么类型的对象?它本身工作正常吗?我刚刚添加了一个更新来解释对象的功能。感谢您的评论。胡乱猜测,但是您可以添加属性
[HandleProcessCorruptedStateExceptions]
到您的
测试方法
查看是否可以捕获
异常
?另请参见愚蠢的提问时间:您是否尝试在IIS中而不是在内置的Web服务器中运行此功能?您可能会发现出现了真正的异常,甚至根本没有异常。您确定//此从未被调用不会被调用,或者它只是被调用了吗再次行?尝试只写一个字符串而不使用ex。我明白你在说什么@JDennis,所以我也会在我的问题中澄清:catch块也从未输入。它不会到达对日志消息的调用。试试这篇文章:这是一个很好的观点,Andrew。我明天会尝试,让你知道它是如何工作的。不幸的是,这没有不起作用。我仍然收到相同的错误“WebDev.WebServer40.EXE中发生未处理的win32异常”。不过,感谢您的建议。做一些研究,因为.NET 2.0所有不符合CLS的异常都包装在
RuntimeWrappedException
中,它源自
异常
捕获(异常)
将捕获符合CLS和不符合CLS的异常。添加指向@DanM comment的链接:
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
}