トップ回答者
aspxファイルのエラーハンドリングについて

質問
-
ASP.NETのC#2010で、WEBアプリを作成しています
エラー処理について質問なのですが
エラートラップはどのように処理すればいいのでしょう例えばデータアクセスオブジェクトがページ内にあったとして、
データベースサーバがダウンしていた場合、
--------------------------------------------------------------------------------------------------------
'/' アプリケーションでサーバー エラーが発生しました。
インスタンス エラーです。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.InvalidOperationException: インスタンス エラーです。
--------------------------------------------------------------------------------------------------------
というような表示がされてしまいますが、
これを、Page_Load等であらかじめtry - catch等で検出し、それなりのエラーメッセージを表示するなどしたいのですが・・・
回答
-
> Page_Load等であらかじめtry - catch等で検出し、それなりのエラーメッ
> セージを表示するなどしたいのですが・・・以下のページによると「よほどのことがない限り、アプリケーションで try-catch を書いてはいけません。」 とのことです。自分もその通りだと思います。
.NETの例外処理 Part.1
http://blogs.msdn.com/b/nakama/archive/2008/12/29/net-part-1.aspx
要求の処理中に Try/Catch ブロックで処置されなかった例外は、当該ページの Page_Error ハンドラおよび Global.asax の Application_Error ハンドラで処置し、例外を解釈してカスタムエラーページに適切なメッセージを表示することができます。以下の MSDN ライブラリに具体的な説明およびサンプルがあります。
方法 : アプリケーションレベルのエラーを処理する
http://msdn.microsoft.com/ja-jp/library/24395wz3%28v=VS.100%29.aspxエラー ハンドラーの完全なコード例
http://msdn.microsoft.com/ja-jp/library/bb397417.aspxなお、上のサンプルコードを IIS7 で試した場合、Button 6(Global-NoCatch.asax へリダイレクト=アクセスが許可されてないファイルへリダイレクト) が期待通りにならないはずですので注意してください。詳しくは下記のページを参照。
customErrors と requestFiltering
http://surferonwww.info/BlogEngine/post/2010/10/12/customErrors-and-requestFiltering.aspx- 回答としてマーク いちろう 2013年10月16日 15:06
-
これを、Page_Load等であらかじめtry - catch等で検出し、それなりのエラーメッセージを表示するなどしたいのですが・・・
データベースがダウンしているかどうかをあらかじめ検査する必要は、ほとんどの場合ありません。なぜなら、実際にデータベースにアクセスした際に判断すれば済むだけのことだからです。さて、「それなりのエラーメッセージ」についてですが、実際にデータベースサーバーにpingを投げるなどして調査すればわからなくもないですが、ユーザーに「データベースがダウンしています」等のメッセージを表示する必要はないように思います。よくあるのが、「問題が発生しました。システム管理者に連絡して下さい。」というような汎用的なメッセージを出すことですが、それで十分なような気がします。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク いちろう 2013年10月16日 15:06
すべての返信
-
> Page_Load等であらかじめtry - catch等で検出し、それなりのエラーメッ
> セージを表示するなどしたいのですが・・・以下のページによると「よほどのことがない限り、アプリケーションで try-catch を書いてはいけません。」 とのことです。自分もその通りだと思います。
.NETの例外処理 Part.1
http://blogs.msdn.com/b/nakama/archive/2008/12/29/net-part-1.aspx
要求の処理中に Try/Catch ブロックで処置されなかった例外は、当該ページの Page_Error ハンドラおよび Global.asax の Application_Error ハンドラで処置し、例外を解釈してカスタムエラーページに適切なメッセージを表示することができます。以下の MSDN ライブラリに具体的な説明およびサンプルがあります。
方法 : アプリケーションレベルのエラーを処理する
http://msdn.microsoft.com/ja-jp/library/24395wz3%28v=VS.100%29.aspxエラー ハンドラーの完全なコード例
http://msdn.microsoft.com/ja-jp/library/bb397417.aspxなお、上のサンプルコードを IIS7 で試した場合、Button 6(Global-NoCatch.asax へリダイレクト=アクセスが許可されてないファイルへリダイレクト) が期待通りにならないはずですので注意してください。詳しくは下記のページを参照。
customErrors と requestFiltering
http://surferonwww.info/BlogEngine/post/2010/10/12/customErrors-and-requestFiltering.aspx- 回答としてマーク いちろう 2013年10月16日 15:06
-
これを、Page_Load等であらかじめtry - catch等で検出し、それなりのエラーメッセージを表示するなどしたいのですが・・・
データベースがダウンしているかどうかをあらかじめ検査する必要は、ほとんどの場合ありません。なぜなら、実際にデータベースにアクセスした際に判断すれば済むだけのことだからです。さて、「それなりのエラーメッセージ」についてですが、実際にデータベースサーバーにpingを投げるなどして調査すればわからなくもないですが、ユーザーに「データベースがダウンしています」等のメッセージを表示する必要はないように思います。よくあるのが、「問題が発生しました。システム管理者に連絡して下さい。」というような汎用的なメッセージを出すことですが、それで十分なような気がします。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク いちろう 2013年10月16日 15:06