共有領域を調べる

C# ASP.NET で共有領域がどのように管理されているかを調べます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. HTTP プロトコルは状態を維持しません。
    サーバーにアップロードした *.aspx を呼び出して、Wev 上のボタンをクリックするとポストバックが発生します。
    サーバー上のページインスタンスはクライアントに出力した段階で破棄されています。
    ポストバックが発生すると、再びサーバー上にインスタンスが生成され処理されます。
    そこで Network Game のように、ステージ(ページ)が変更されても現在の情報を引き継ぐには何らかの工夫が必要になります。
    その辺りが Network Game の最も解りにくい(難しい)所では無いでしょうか。 (^_^;)
  2. ASP.NET では、次の方法で共有領域を管理しています。
    管理情報は「キーと値」の組み合わせで記憶されています。
    1. Session 単位で管理
      セッションが確立するごとにIDが割り振られ、このIDでクライアント単位の情報を管理します。
      ASP.NET は、セッションIDをクッキーに格納することで、クライアント(ブラウザ)を識別します。
    2. Application 単位で管理
      ページが最初に呼び出されたときに作成され、アプリケーションが終了するまでメモリに常駐します。
    3. ViewState 単位で管理
      現在表示中のページをサーバー側で復元したり、ポストバック関数で取得するための管理情報です。
      ViewState 情報は、ポストバックするときに HTML 内に非表示情報として保存されます。
  3. 最初に Web を呼び出した状態で、共有領域の設定と読み出しを行ってみました。
    次に Redirect でリンクした状態で共有領域を調べてみました。
  4. 最初のステージで Variable を記録する関数と、Variable を読み出して表示する関数です。
    複数のページを立ち上げると Session, Application は一個の領域を共通で参照していました。
    ViewState は立ち上げたページ毎に独立して制御されています。
        //  Variable を記録
        void Button1_Click(object sender, EventArgs e)
        {
            Session["SinVal"] = TextBox1.Text;
            Application["AppVal"] = TextBox2.Text;
            ViewState["VieVal"] = TextBox3.Text;
        }
        //  Variable の読み出し
        void Button2_Click(object sender, EventArgs e)
        {
            TextBox4.Text = (string)Session["SinVal"];
            TextBox5.Text = (string)Application["AppVal"];
            TextBox6.Text = (string)ViewState["VieVal"];
        }
        
  5. 最初のステージから Button のクリックで次のステージにリンクします。
        //  次のステージを呼び出す
        void Button3_Click(object sender, EventArgs e)
        {
            Response.Redirect("val2.aspx");
        }
        
  6. リンク先の val2.aspx でも val1.aspx と同じように共有領域を表示してみました。
    リンク先にも Session, Application は引き継がれていました。
    またリンク先で値を変更すると、呼び出した側にも反映しました。
    ViewState はリンク先には引き継がれませんでした。
  7. 「param.aspx を呼び出す」をクリックして実行してみて下さい。
    先のページをそのままにして、もう一度呼び出して相互の関係を調べて下さい。
  8. アプリケーソンによって、三層の共有領域を使い分けて下さい。
    このとき忘れてはならないことは、複数のクライアントが同時にログインすることです。

val1.aspx のソースコード

val2.aspx のソースコード

param.aspx を呼び出す

超初心者のプログラム入門(C# on-line game)