10

ASP.NET で "WebDev.WebServer.Exe が動作を停止しました" というエラーを処理し、ページを実行したままにしたり、WebServer だけを実行したりする方法はありますか? それとも、これは不可能な作業であり、本質的に、死んだ人の命を救う方法を尋ねるようなものですか?

try/catch ブロック内にエラーの原因となるコードがありますが、違いはありません。また、新しい UnhandledExceptionEventHandler を登録しようとしましたが、それもうまくいきませんでした。何か間違ったことをしている場合に備えて、私のコードは以下のとおりです。

また、明確にするために、エラーを防ぐ方法について助けを求めているわけではありません。エラーを処理するためにできることがあれば、エラーが発生したかどうか、いつ発生したかを知りたいです。

更新 1: TestOcx は、文字列の参照をClarionで記述された DLL に渡す VB6 OCX です。

更新 2: @JDennis の回答によると、catch(Exception ex)ブロックも入力されていないことを明確にする必要があります。ブロックから OCX への呼び出しを削除しても、メソッドtry\catchには到達しません。UnhandledException基本的に実行されない領域が 2 つあります。

更新 3: @AndrewLewis から、CLS に準拠していない例外をキャッチするために通常のブロックも追加しようとしましたがcatch、これも機能しませんでした。ただし、.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);
    }
}
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 に答える