ASP.net ヘルス モニタリングを使用して、asmx Web サービスから未処理の例外をログに記録しようとしています。web.config で正常性監視を有効にしましたが、何もログに記録されません。正常性監視は asmx Web サービスで機能しますか? 私はグーグルで検索しましたが、他の人が同じ質問をしたようですが、明確な答えが得られませんでした.
5 に答える
質問に対する回答がない限り、回答を投稿しないでください。質問以外の答えが中途半端で、読者を混乱させます。正常性監視は、「実際には処理されない」ASP.NET 例外または Application_Error イベントとは関係ありません。
答えはノーだ。私はこれを少し掘り下げましたが、何らかの理由で、Web メソッド内で発生した例外が正常性監視プロバイダーに到達することはありません。それらを捕まえて自分で処理する必要があるようです。
未処理の例外の通常の解釈と、Tom が参照している解釈には違いがあります。トムが言及しているのは、本当に未処理の例外であり、w3wp.exe プロセスを (ログに記録する前に) 強制終了します 。 /04/07/spawning-threads-in-aspnet-can-be-dangerous
通常の未処理の例外により、例外が発生し、ユーザー/呼び出し先にエラー ページが表示されます。ただし、w3wp.exe プロセスがクラッシュすることはありません。これらの例外は、ヘルス モニタリングによって検出される必要があります。
Global.asax では、Visual Studio によって自動生成されたものを使用する場合、コードを Application_Error メソッドに追加して、例外を処理し、選択した方法でそれらをログに記録できます。Init メソッドをオーバーライドして、クラスの Error イベントのイベント ハンドラーを追加することもできます。
どちらの場合も、役に立たないバニラの EventArgs オブジェクトしか取得できませんが、発生した例外を取得するには HttpContext.Current.Server.GetLastError() を使用できます。
別の投稿者が述べたように、これは、非同期に実行されているデリゲート、自分で開始したスレッド、または Page.RegisterAsyncTask() を使用して作成された非同期ページ タスクによってスローされる例外をキャッチしない場合があります。これらについては、実装に例外のバックストップがあることを常に確認して、例外をキャッチし、IIS ワーカー プロセスが中止されないようにする必要があります。
この場合、CALM製品が機能するはずです。そうでない場合はお知らせください-私が書きました;-)
未処理の例外がどの種類の try/catch 内でも実行されていないため、機能しません。そのため、ログに記録できません。次のブログ投稿をご覧ください: http://blogs.msdn.com/tom/archive/2007/12/04/unhandled-exceptions-causing-asp-net-to-crash-in-net-2-0。 aspx