私は投稿ASP.NET application pool shutdown problemとIIS 7.5: problem with Application poolを読んだが、私の質問に答えなかった。ASP.NETページから呼び出されたDLLで例外が発生した後、IIS7アプリケーションプールがシャットダウンするのはなぜですか?
私はコードビハインドでBINディレクトリ経由で提供されたDLLからクラスをインスタンス化し、このインスタンスのメソッドを呼び出すC#ASP.NETページがあります。 DLL内部のメソッドはDataRow
オブジェクト内に存在しない列のためにSystem.ArgumentException
をスローします。
Source: ASP.NET 2.0.50727.0
Application ID: /LM/W3SVC/1/ROOT/...
Process ID: 9476
Exception: System.ArgumentException
Message: Column 'someColumn' does not belong to table.
StrackTrace:
ASP.NETページ内の呼び出し元のコードは、一般的なtry-catch
ブロック内のメソッド呼び出しをラップ:イベントログに次のエラーが表示されます。ページをリクエストすると、IISインスタンスの対応するアプリケーションプールがクラッシュし、Webサイトが使用できなくなります(エラー503)。私は手動でアプリケーションプールを再起動する必要があり、サイトは再び動作します。今私の質問は、このようなアクセスしようとしたときにスローされSystem.ArgumentException
として、なぜ、比較的「単純な」例外では
try
{
SomeExternalClass someExternalClass = new SomeExternalClass();
someExternalClass.SomeMethod(someId);
}
catch(Exception ex)
{
// "smp" is an instance of "StatusMessagePanel", a control we use on all pages
// to show error information, basically a div container with an icon.
smp.ShowError(ex.Message);
}
:
更新 としては、背後にASP.NETコードからtry catch
ブロックを要求しました存在しないDataRow
列は、ウェブサイト全体をクラッシュさせますか?また、ASP.NETページの一般的なtry-catch
ブロックは役に立ちません。これは、Webサイト全体を完全に利用できないようにするものではありませんか、それとも間違った前提ですか?私はこれが基本的に(II)サーバーをダウンさせることができるとは決して考えなかったでしょう。
アクセスする前に列の存在をチェックする必要があると私に伝えてくれることを期待して、これについて知りましたが、レガシーコードが変更されましたが、これは上記のように私の質問ではありませんなぜその結果が非常に激しいのかを知る。
アップデート2
DLL内で呼び出されている問題の方法try-catch
ブロックに包まれているスレッドを開始:それはかつて私に起こった
[...]
try
{
ThreadStart starter =() => CreateReport(...)
Thread thread = new Thread(starter);
thread.Start();
if(!thread.Join(TimeSpan.FromMinutes(15)))
{
// Log some timeout warning
}
else
{
// Log information about successful report generation
}
}
catch(Exception ex)
{
// Log error information
}
catchブロックで何が起こりますか?それが例外をスローするなら、あなたは困っているかもしれません。 try catchコードを投稿できますか? – levelnis
catchブロックは、エラーメッセージをクライアント(ブラウザ)に見えるようにするメソッドを呼び出します。質問を更新します。 – Gorgsenegger
ちょうど私をユーモアしてください - try-catchブロックを完全に削除してメソッドを呼び出すだけで、アプリケーションプールはまだクラッシュしますか? – levelnis