16

私たちの ASP.NET 2 Web アプリケーションは、非常にエレガントに例外を処理します。Global ASAX の Application_Error で例外をキャッチします。そこから例外をログに記録し、わかりやすいメッセージをユーザーに表示します。

ただし、今朝、サイトの最新バージョンを展開しました。30 分は問題なく動作しましたが、その後、アプリケーション プールがクラッシュしました。以前のリリースを復元するまで、サイトは復旧しませんでした。

アプリ プールをクラッシュさせ、通常の例外ハンドラーをスキップするにはどうすればよいですか? この問題を再現しようとしていますが、今のところうまくいきません。


更新:解決策が見つかりました。私たちのページの 1 つは、別のページをスクリーンスクレイピングしていました。しかし、URL が正しく構成されておらず、ページが無限にスクリーンスクレイピングされ、スタック オーバーフロー例外が発生しました

4

4 に答える 4

14

私が見た最も一般的なエラーと「プールのクラッシュ」は、ループ呼び出しです。

public string sMyText
{
   get {return sMyText;}
   set {sMyText = value;}
} 

sMyTextを呼び出すだけです...

于 2010-06-15T12:37:24.697 に答える
13

これを行うには、 request のコンテキストの外部から例外をスローするだけです (もちろん処理はしません) 。

たとえば、別のスレッドで発生した例外はそれを行う必要があります。

protected void Page_Load(object sender, EventArgs e)
{
   // Create a thread to throw an exception
   var thread = new Thread(() => { throw new ArgumentException(); });

   // Start the thread to throw the exception
   thread.Start();

   // Wait a short while to give the thread time to start and throw
   Thread.Sleep(50);
}

詳細については、MS ナレッジ ベースを参照してください。

于 2010-06-15T12:13:35.580 に答える
4

アリストスの答えは良いです。また、誰かがベース コールを変更せずにオーバーライドされたメソッドを OnInit から OnLoad に変更したときに、Page ライフ サイクルでも愚かなオーバーライドを使用して行われるのを見てきました。

protected override void OnLoad(EventArgs e)
{
  //some other most likely rubbish code
  base.OnInit(e);
}
于 2010-06-15T13:15:47.963 に答える
1

を投げてみることができThreadAbortExceptionます。

于 2010-06-15T11:45:39.827 に答える