.NET TIPS [ASP.NET AJAX]非同期通信で発生した例外の処理方法を変更するには?[2.0、3.0、3.5、C#、VB]山田 祥寛2008/05/29 |
![]() |
「TIPS:[ASP.NET]独自のエラー・ページを設定するには?」では、通常のポストバックで発生した例外の処理方法について解説した。これを念頭に置いて、本稿では非同期ポストバック(UpdatePanelコントロール)による処理で例外が発生した場合のASP.NET AJAXのデフォルトの動作と、その動作を変更する方法について紹介する。本稿では、カスタム・エラー・ページの設定方法については割愛するので、これについての詳細は前掲のTIPSを参照していただきたい。
●カスタム・エラー・ページが設定されていない場合
例外発生時の挙動を確認するために、まずは、次のようなページ(CustomError.aspx)を用意しておこう。
![]() |
||||||||||||
| CustomError.aspxのフォーム・レイアウト | ||||||||||||
| 以下の各コントロールを配置する。 | ||||||||||||
|
さらに、Buttonコントロール(btnUpdate)のClickイベント・ハンドラを次のように記述する。
|
||
| [更新]ボタン・クリック時に例外を発生するコード(上:CustomError.aspx.cs、下:CustomError.aspx.vb) |
このコードでは、UpdatePanelコントロール内の[更新]ボタンをクリックしたタイミングで無条件に例外が発生するようにしている。まずはこのページを、カスタム・エラー・ページを設定していない状態で実行してみるとどうなるだろうか。
| [注意]サンプル実行時の注意 |
Visual Studio上から本サンプルをデバッグ実行してしまうと、例外発生時にデバッグ中断されてしまい、意図した挙動を確認できなくなるので注意すること。本サンプルを起動するには、[デバッグ]−[デバッグなしで開始]を実行する必要がある。 |
![]() |
| カスタム・エラー・ページ未設定の場合(CustomError.aspxの実行結果) |
このように、例外メッセージがダイアログ表示されることが確認できるはずだ。
●カスタム・エラー・ページが設定されている場合
では、次にカスタム・エラー・ページが有効な状態で、CustomError.aspxを実行してみるとどうだろう。今度は、カスタム・エラー・ページにリダイレクトされる――これがASP.NET AJAXのデフォルトの挙動である。
![]() |
| 例外発生時にカスタム・エラー・ページにリダイレクト |
もっとも、非同期通信での例外でカスタム・エラー・ページにリダイレクトする必要があるかどうかは、その時どきの状況によって異なるかもしれない。というのも、通常の同期通信とは異なり、非同期通信は(例えば)自動的なデータの更新や入力支援など、補助的な用途で用いられることも多い。このようなケースで毎回エラー・ページにリダイレクトしてしまうと、エンド・ユーザーの作業はそこで中断されることになり、かえってアプリケーションの使い勝手を悪化させてしまうことにもなりかねない。後続の操作を続けるうえで差し支えのない例外であるならば、リダイレクトの発生はできるだけ抑えたいところだ。
そこで登場するのが、ScriptManagerコントロールのAllowCustomErrorRedirectプロパティなのである。このプロパティをFalse(デフォルトはTrue)に設定することで、非同期通信で発生した例外によるリダイレクトを無効にすることができる。
![]() |
| リダイレクトを無効にした場合(例外メッセージをダイアログ表示) |
果たして、AllowCustomErrorRedirectプロパティをFalseに設定した状態で、CustomError.aspxを実行してみると、今度はエラー・ページにリダイレクトされず、上の画面のようなエラー・ダイアログだけが表示されるのを確認できる*1。
| *1 もっとも、エラー・ダイアログ表示すら煩わしいという局面では、Sys.WebForms.PageRequestManagerオブジェクトを利用することで、独自の例外処理を定義することも可能だ。具体的な方法については、「PageRequestManagerクラスでUpdatePanelコントロールを極める!」もご参照いただきたい。 |
●エラー・ダイアログの表示メッセージをカスタマイズする
しかしながら、デフォルトで生成される例外メッセージは、多くの場合が開発者向けの内容であり、エンド・ユーザーにとっては意味がない(理解できない)ものであることがほとんどだ。また、メッセージの内容によってはアプリケーションの内部的な処理を漏えいする原因となることもあり、セキュリティ上の理由からも、これをそのまま表示することは好ましくない。
そこでAllowCustomErrorRedirectプロパティをFalseに設定した場合には、通常、エンド・ユーザーに対して表示すべき、一般的なエラー・メッセージを用意しておくべきだろう。エラー・メッセージを設定するには、AsyncPostBackErrorMessageプロパティを指定すればよい。以下は、AsyncPostBackErrorMessageプロパティに「エラーが発生しています。非同期通信サービスが一時的に利用できません」と設定した場合の結果である。
![]() |
| AllowCustomErrorRedirectプロパティがFalse、かつ、AsyncPostBackErrorMessageプロパティにエラー・メッセージを設定した場合のエラー・ダイアログの表示 |
●非同期通信のタイムアウト時間を設定する
アプリケーションで発生する例外を処理するほか、ASP.NET AJAX(ScriptManagerコントロール)では非同期通信が一定時間内で完了しない場合にタイムアウトさせることも可能だ。タイムアウト時間を設定するには、AsyncPostBackTimeoutプロパティに秒単位で設定すればよい。ここでは、以下のようなコードを追記したうえで、AsyncPostBackTimeoutプロパティを2(秒)に設定してみよう。
そして、タイムアウト・エラーを意図的に発生させるために、ButtonコントロールのClickイベント・ハンドラに次の太字のコードを記述する。
|
||
| 意図的にタイムアウト・エラーを発生させるコード(CustomError.aspx:上:C#、下:VB) |
この状態でコードを実行してみると、以下のようなエラー・ダイアログが表示され、確かに処理がタイムアウトしていることが確認できる。
![]() |
| 非同期ポストバックでタイムアウトが発生した場合 |
ちなみに、タイムアウトが発生した場合は、AllowCustomErrorRedirectプロパティの設定にかかわらず、エラー・ページにはリダイレクトしない。![]()
| 利用可能バージョン:.NET Framework 2.0 利用可能バージョン:.NET Framework 3.0 利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:ASP.NET AJAX 関連TIPS:[ASP.NET]独自のエラー・ページを設定するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -








