1

ASP.NET用に作成する場合、およびデバッガーが接続されているときに、例外をスローするWebページにアクセスすると、例外の原因となったコード行で未処理の例外ヘルパーが起動されます。

これは、未処理の例外のみをキャッチし、スローされた例外をキャッチしていない場合でも発生します。ただし、F5キーを押したり、例外を無視したり、デバッガーを接続しなかったりしても、AppDomainは破棄されません。代わりに、どういうわけかASP.NETは未処理の例外を処理します。

これはどのように機能しますか?また、このような例外処理を他の場所に実装して、AppDomain全体またはプロセス全体を強制終了するのではなく、他の未処理の例外を飲み込むことができますか?

編集:明確にするために、私は例外処理とtry...catchブロックがどのように機能するかを理解しています。ただし、この場合、デバッガーは例外が未処理であると見なしているようですが、同時にASP.NETは例外をtry...catchでラップしています。それが私がエミュレートしたい動作です。

4

2 に答える 2

2

これはどのように作動しますか、

は、実行中のコードを、必要な例外処理コードでラップするだけです。asp.net Webページ(またはビュー、またはコントローラー)は単なるクラスであり、その使用方法は完全にホスト(この場合はasp.net)次第です。

VSデバッガーが処理された場合、なぜそれが機能しなくなるのですか?

MSDNドキュメントからの引用があります:

ASP.NETには、ブラウザユーザーにエラーページを表示するための例外を処理するトップレベルの例外ハンドラーがあります。その最上位の例外ハンドラーは、Just My Codeがオンになっていない限り、未処理の例外がデバッガーに侵入するのを防ぎます。ASP.NETデバッグ用にJustMyCodeを有効にしていることを確認してください。

つまり、VSデバッグオプションで「Justmy code」が有効になっている場合(デフォルトで有効になっている場合)、呼び出し元で処理されているかどうかに関係なく、独自のコードで処理されていない例外が発生します。

このような例外処理を他の場所に実装して、AppDomain全体またはプロセス全体を強制終了するのではなく、他の未処理の例外を飲み込むことができるでしょうか。

あなたはそれをすることはできません、それはセキュリティ対策です。

于 2012-07-28T11:36:20.527 に答える
1

WebページはIISおよびASP.NETランタイムからの一連のメソッド呼び出しであり、Webページはappdomainで単独で実行されているわけではありません。コードを呼び出すコードには、そのメソッド呼び出しの周りに通常のtry/catchブロックがあります。

同様の設定を自分で作成できます。

  • ConsoleApplicationの場合、Mainのeveythingの周りにtry / catchブロックを配置します。これは、アプリの他の場所で処理されない例外をキャッチすることを意味します。
  • Windowsフォームアプリケーションの場合、Application.ThreadExceptionイベントを処理します(これにより、Windowsフォームのメッセージループのtry / catchブロックにフックできます)
  • WPFアプリケーションの場合、Application.DispatcherUnhandledExceptionイベントを処理します(これにより、WPFのメッセージループのtry / catchブロックにフックできます)
  • ...またはAppDomain.UnhandledExceptionイベントを使用できます

これらの種類のプログラムの問題は次のようになります。アプリのどこで続行する必要がありますか?

最後の質問は、すべてのページ呼び出しが互いに分離されているため、ASP.NETで簡単に解決できます。ユーザーは、ページに再度移動するだけで続行します。

于 2012-07-28T11:50:24.480 に答える