Есть ли способ справиться с ошибкой "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);
}
}