- - PR -
そもそもサーバーサイドのプログラムの状態って?
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-10-13 02:53
基本的なことなんで、ちょっと恥ずかしい質問なんですが・・。
そもそも、WEBアプリのサーバーサイド側のプログラムというのは ページの表示要求やポストバックの時だけメモリ上に生成されて、 Page_Loadやクリックイベントなどのメソッド処理が終われば、 プログラム自体が終了してメモリ上からいなくなる、と考えていて よいのでしょうか? でないと、ついWindowsアプリのような感覚でコードを考えてしまいそうになり、 「複数ページがフレームで同一画面に表示されているから、相手のページの WEBフォームのサーバー側プログラムのインスタンスを参照して、 相手のプロパティやメソッドが使えるんとちゃうん?」と思って、 そのようなコーディングをしそうになるんですが。 でも、ページ遷移の瞬間の値の受け渡し方法に、ページにプロパティ変数を 用意しておいて、Context.Handlerで呼び出しもとのページを参照できるから そのプロパティ変数も貰い受けることができる、という方法も見たことあるので 「やっぱりメモリ上に待機してるんかなー?」とか思ったり・・・ しょせんは、(極端に言えば)ページを表示するHTMLを作るものでしかないのが サーバーサイドプログラムだと思ってますので、的を外れた疑問点かも 知れませんが・・・。 1つのページのサーバー側コードが実行中に、そのコードの途中で、 別のページ用のサーバー側プログラムをインスタンス化して、 見かけ上ほぼ同時にブラウザ側にレスポンスを返せば、 フレーム構成の親子画面を、見かけ上ほぼ同時に更新する、とかできれば、 なんとなく楽しそうかな、とか思っただけです。 | ||||||||||||
|
投稿日時: 2002-10-13 10:43
それぞれのページを処理するインスタンスは独立しており、処理が終わればなくなります。 それぞれのHTTPリクエストは同期処理されるわけではないので、 ページ処理中にもう一方のページが同時に処理されていることは全く保障されません。 HTTPレスポンスを返し終わったページの状態がいつでもサーバで参照できるように 残ってたりしたら、使用メモリがどんどん増えていってしまいますからね。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbtskpassingvaluesbetweenwebformspages.asp に書いてあるContext.Handlerの使い方であれば、 Server.Transferを使用する場合での方法であるため、 あくまでも1つのHTTPレスポンスを返す処理の中でしか変数を受け渡すことはできません。 (例えば、検索ページ処理中のエラー情報を受け渡して、エラーページで処理し、 その出力をHTTPレスポンスとして返す場合など)
フレームの親子(上下?)で、情報を共有したいなら、引用のURLにも書いてありますが、 フレームセット側で処理を行い、その結果を引継ぎ情報として ・frameタグのQueryStringに追加 ・Session情報を使用する のどちらかの方法で受け渡すことができます。 ASP.Netになっていろいろなことができるようになったように思われがちですが、 結局HTTPとHTMLを使用している限りはその制限を越えることはできません。 HTTPは簡単なプロトコルですから、もう一度復習されては? | ||||||||||||
|
投稿日時: 2002-10-13 12:24
ご丁寧な解説、ありがとうございます。
そうですよね、httpの仕組み上、メモリ上から処理が終わるたびに なくならないと困りますよね。 ただ、VS.NETを使ってコーディングを進めていると、あの VBライクな手法に惑わされてしまう瞬間があったり・・・ VS.NETのヘルプや巷のASP.NET関係の解説本には その基本的な仕組みを、コーディングレベルと密接に関連づけて はっきりと解説してくれてるものが(今まで見た中では)なかったので、 なんとなくぼやーっとして気持ち悪かったんです。 ヘルプとか本とかかなり見ましたけど、私が理解できずに 流してしてたのかな・・・ 実際の手がけてるものは、Sessionを利用してますので とりあえず常套手段のようで、一安心してます。 |
1