- PR -

そもそもサーバーサイドのプログラムの状態って?

1
投稿者投稿内容
まいさん
会議室デビュー日: 2002/10/06
投稿数: 3
お住まい・勤務地: 兵庫県
投稿日時: 2002-10-13 02:53
基本的なことなんで、ちょっと恥ずかしい質問なんですが・・。

そもそも、WEBアプリのサーバーサイド側のプログラムというのは
ページの表示要求やポストバックの時だけメモリ上に生成されて、
Page_Loadやクリックイベントなどのメソッド処理が終われば、
プログラム自体が終了してメモリ上からいなくなる、と考えていて
よいのでしょうか?

でないと、ついWindowsアプリのような感覚でコードを考えてしまいそうになり、
「複数ページがフレームで同一画面に表示されているから、相手のページの
WEBフォームのサーバー側プログラムのインスタンスを参照して、
相手のプロパティやメソッドが使えるんとちゃうん?」と思って、
そのようなコーディングをしそうになるんですが。

でも、ページ遷移の瞬間の値の受け渡し方法に、ページにプロパティ変数を
用意しておいて、Context.Handlerで呼び出しもとのページを参照できるから
そのプロパティ変数も貰い受けることができる、という方法も見たことあるので
「やっぱりメモリ上に待機してるんかなー?」とか思ったり・・・

しょせんは、(極端に言えば)ページを表示するHTMLを作るものでしかないのが
サーバーサイドプログラムだと思ってますので、的を外れた疑問点かも
知れませんが・・・。

1つのページのサーバー側コードが実行中に、そのコードの途中で、
別のページ用のサーバー側プログラムをインスタンス化して、
見かけ上ほぼ同時にブラウザ側にレスポンスを返せば、
フレーム構成の親子画面を、見かけ上ほぼ同時に更新する、とかできれば、
なんとなく楽しそうかな、とか思っただけです。
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-10-13 10:43
引用:
そもそも、WEBアプリのサーバーサイド側のプログラムというのは
ページの表示要求やポストバックの時だけメモリ上に生成されて、
Page_Loadやクリックイベントなどのメソッド処理が終われば、
プログラム自体が終了してメモリ上からいなくなる、と考えていて
よいのでしょうか?

でないと、ついWindowsアプリのような感覚でコードを考えてしまいそうになり、
「複数ページがフレームで同一画面に表示されているから、相手のページの
WEBフォームのサーバー側プログラムのインスタンスを参照して、
相手のプロパティやメソッドが使えるんとちゃうん?」と思って、
そのようなコーディングをしそうになるんですが。


それぞれのページを処理するインスタンスは独立しており、処理が終わればなくなります。
それぞれのHTTPリクエストは同期処理されるわけではないので、
ページ処理中にもう一方のページが同時に処理されていることは全く保障されません。

HTTPレスポンスを返し終わったページの状態がいつでもサーバで参照できるように
残ってたりしたら、使用メモリがどんどん増えていってしまいますからね。

引用:
でも、ページ遷移の瞬間の値の受け渡し方法に、ページにプロパティ変数を
用意しておいて、Context.Handlerで呼び出しもとのページを参照できるから
そのプロパティ変数も貰い受けることができる、という方法も見たことあるので
「やっぱりメモリ上に待機してるんかなー?」とか思ったり・・・


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レスポンスとして返す場合など)

引用:
1つのページのサーバー側コードが実行中に、そのコードの途中で、
別のページ用のサーバー側プログラムをインスタンス化して、
見かけ上ほぼ同時にブラウザ側にレスポンスを返せば、
フレーム構成の親子画面を、見かけ上ほぼ同時に更新する、とかできれば、
なんとなく楽しそうかな、とか思っただけです。


フレームの親子(上下?)で、情報を共有したいなら、引用のURLにも書いてありますが、
フレームセット側で処理を行い、その結果を引継ぎ情報として
 ・frameタグのQueryStringに追加
 ・Session情報を使用する
のどちらかの方法で受け渡すことができます。

ASP.Netになっていろいろなことができるようになったように思われがちですが、
結局HTTPとHTMLを使用している限りはその制限を越えることはできません。

HTTPは簡単なプロトコルですから、もう一度復習されては?
まいさん
会議室デビュー日: 2002/10/06
投稿数: 3
お住まい・勤務地: 兵庫県
投稿日時: 2002-10-13 12:24
ご丁寧な解説、ありがとうございます。

そうですよね、httpの仕組み上、メモリ上から処理が終わるたびに
なくならないと困りますよね。

ただ、VS.NETを使ってコーディングを進めていると、あの
VBライクな手法に惑わされてしまう瞬間があったり・・・

VS.NETのヘルプや巷のASP.NET関係の解説本には
その基本的な仕組みを、コーディングレベルと密接に関連づけて
はっきりと解説してくれてるものが(今まで見た中では)なかったので、
なんとなくぼやーっとして気持ち悪かったんです。

ヘルプとか本とかかなり見ましたけど、私が理解できずに
流してしてたのかな・・・

実際の手がけてるものは、Sessionを利用してますので
とりあえず常套手段のようで、一安心してます。
1

スキルアップ/キャリアアップ(JOB@IT)