HttpContextオブジェクトによるページ遷移

 いままで作成してきたサンプルはいろいろなイベントの記述をしてきました。例えば、ボタンを押したら・・・ページが読み込まれたら・・・等です。。Webアプリケーションを作成する上で出てくるイベントとして、アプリケーションレベルのイベントと、セッションレベルのイベントがあります。

 ここで、アプリケーションレベルとセッションレベルに関してみてみましょう。アプリケーションレベルはアプリケーション毎、つまり、ソフトウェアそのもので発生するイベントです。もうひとつはセッションレベル、つまり、接続ユーザーごとに発生するイベントです。

 それらのレベルには次のようなイベントが用意されています。

■ Application_StartとApplication_End

 Webアプリケーションの起動時と終了時に実行されるイベントプロシージャです。この起動と終了はApplicationオブジェクトが生成される、もしくは破棄される時に発生します。このApplicationオブジェクトはWebアプリケーション毎にひとつだけ生成されるようになっています。

■ Application_BeginRequestとApplication_endRequest

 HTTPによる要求の開始時と終了時に実行されるイベントプロシージャです。ポストバックによってデータを送信するときに発生します。

■ Application_Error

 Webアプリケーション内で、例外(エラー)が発生すると実行されるイベントプロシージャです。

■ Session_StartとSession_End

 ASP.NETが管理するセッションの開始時と終了時に実行されるイベントプロシージャです。セッションはWebブラウザからWebアプリケーションにHTTPによる要求が出されたときに確立され、タイムアウトかプログラムによる切断がされるまで継続されます。このセッションが開始されるときにSessionオブジェクトが生成され、セッションが破棄されたときにSessionオブジェクトも破棄されます。

 アプリケーション毎にデータを扱う、つまり、利用ユーザーが共有利用できる仕組みも用意されています。それは、Application変数です。また、セッション毎にデータを扱う仕組みもあります。それは、Session変数です。

プロジェクトの種類 ASP.NET Webアプリケーション
プロジェクト名 GlobalTest

サンプルダウンロード

○ デザイン

 次の図のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

 「新しい項目の追加」でWebサイトに「Global.asax」ファイルを追加してください。

新しい項目の追加
新しい項目の追加

○ プログラム

Default.aspx.vb

  1. Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.  'Session_StartイベントやSession_EndイベントでApplicationオブジェクトに保存した値を表示
  3.  Me.Label1.Text = Me.Application("Count")
  4. End Sub
  5. Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
  6.  'Sessionをキャンセルをする
  7.  Session.Abandon()
  8. End Sub
  9. Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
  10.  '存在しないページへ遷移
  11.  Me.Response.Redirect("hogehoge.aspx")
  12. End Sub

 Global.asaxの記述をします。各イベントプロシージャの処理の記述をしてください。

Global.asax

  1. Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
  2.  ' アプリケーションのスタートアップで実行するコードです
  3.  ' デバッグウィンドウにメッセージを表示する
  4.  System.Diagnostics.Debug.WriteLine("アプリケーションの開始")
  5.  Me.Application("Count") = 0
  6. End Sub
  7. Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
  8.  ' アプリケーションのシャットダウンで実行するコードです
  9.  ' デバッグウィンドウにメッセージを表示する
  10.  System.Diagnostics.Debug.WriteLine("アプリケーションの終了")
  11. End Sub
  12. Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
  13.  ' ハンドルされていないエラーが発生したときに実行するコードです
  14.  ' 発生した例外をクリアしてプログラムコードを続行
  15.  System.Diagnostics.Debug.WriteLine("例外の発生")
  16.  ' Application_Errorイベントハンドラでは続けて表示するWebページを指定する必要がある。
  17.  ' 表示するWebページはWeb.Configファイルで指定することもできる。
  18.  Me.Server.Transfer("Default.aspx")
  19. End Sub
  20. Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
  21.  ' 新規セッションを開始したときに実行するコードです
  22.  ' デバッグウィンドウに表示して、Application変数を変化させる
  23.  System.Diagnostics.Debug.WriteLine("セッションの開始")
  24.  Me.Application.Lock()
  25.  Me.Application("Count") = Int32.Parse(Me.Application("Count")) + 1
  26.  Me.Application.UnLock()
  27. End Sub
  28. Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  29.  ' セッションが終了したときに実行するコードです
  30.  ' メモ: Web.config ファイル内で sessionstate モードが InProc に設定されているときのみ、
  31.  ' Session_End イベントが発生します。session モードが StateServer か、または SQLServer に
  32.  ' 設定されている場合、イベントは発生しません。
  33.  ' デバッグウィンドウにメッセージを表示して、Application変数を変化させる。
  34.  System.Diagnostics.Debug.WriteLine("セッションの終了")
  35.  Me.Application.Lock()
  36.  Me.Application("Count") = Int32.Parse(Me.Application("Count")) - 1
  37.  Me.Application.UnLock()
  38. End Sub
  39. '追加
  40. Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
  41.  ' デバッグウィンドウにメッセージを表示する
  42.  System.Diagnostics.Debug.WriteLine("要求の開始")
  43. End Sub
  44. '追加
  45. Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As System.EventArgs)
  46.  ' デバッグウィンドウにメッセージを表示する
  47.  System.Diagnostics.Debug.WriteLine("要求の終了")
  48. End Sub
  49. '追加
  50. Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs)
  51.  ' デバッグウィンドウにメッセージを表示する
  52.  System.Diagnostics.Debug.WriteLine("認証要求の発生")
  53. End Sub

○ 実行結果

 index.aspxを実行してください。

実行結果
実行結果

 現在、接続中のセッションの数が表示されるようになります。アプリケーション開始時に、Application変数を0で初期化し、セッション開始時にインクリメントし、セッション終了時にデクリメントするようにしています。

 アプリケーションレベルでの処理の状態は、出力ウィンドウでも確認することができます。複数ブラウザを起動してテストをしましょう。

前へ   次へ