Подтвердить что ты не робот

Ошибка обработки "WebDev.WebServer.Exe перестает работать"

Есть ли способ справиться с ошибкой "WebDev.WebServer.Exe перестала работать" в ASP.NET и сохранить работу страницы или даже просто WebServer? Или это невыполнимая задача, и по существу, это как спросить, как спасти кого-то жизнь после того, как они умерли?

У меня есть код, вызывающий ошибку, внутри блока try/catch, но это не имеет значения. Я также попытался зарегистрировать новый UnhandledExceptionEventHandler, но это тоже не сработало. Мой код ниже, если я делаю что-то неправильно.

Также, чтобы быть ясным, я не прошу помощи о том, как предотвратить ошибку; Я хочу знать, если и когда произойдет ошибка, если я что-то могу сделать, чтобы справиться с ней.

UPDATE 1: TestOcx - это OCX VB6, который передает ссылку на строку в DLL, написанную в Clarion.

ОБНОВЛЕНИЕ 2: В соответствии с ответом @JDennis, я должен уточнить, что блок catch(Exception ex) также не вводится. Если я удалю вызов OCX из блока try\catch, он все равно не достигнет метода UnhandledException. Есть по существу две области, которые никогда не выполняются.

ОБНОВЛЕНИЕ 3: Из @AndrewLewis я также попытался добавить обычный catch блок, чтобы поймать исключения, не совместимые с CLS, и это тоже не сработало. Однако позже я обнаружил, что с тех пор, как .NET 2.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);
    }
}
4b9b3361

Ответ 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
}

Ответ 2

Ваш код читает //ЭТО НИКОГДА НЕ ПОЛУЧАЕТСЯ.

Если вы поймаете исключение, он больше не будет обрабатываться. поэтому он не запускает событие unhandledexception.