- PR -

【ASP.NET】ソリューションとプロジェクトとセッション

1
投稿者投稿内容
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 2002-06-18 13:41
初めて書き込みさせて頂きます。
プロジェクトをまたがったセッションについて質問です。

【環境】
Webサーバ:Windows 2000 Server,IIS5.0
開発マシン:Windows 2000 Personal
プロジェクトはサーバに作成

【構成】
test.sln
- test01.csproj
  - test01_1.aspx   …スタートページに設定
   - test01_1.aspx.cs
  - test01_2.aspx   …test01_1.aspxより遷移
   - test01_2.aspx.cs
- test02.csproj
  - test02_1.aspx   …test01_1.aspxより遷移
   - test02_1.aspx.cs

test01_1.aspx.csで
  Private void Page_Load(object sender, System.EventArgs e)
  {
    if (Page.IsPostBack == false)
    {
      Session["Time"] = DateTime.Now.ToString("G");
    }
  }

それで、Session["Time"].ToString() を test01_2.aspx.cs で確認すると値は
入っているのですが、プロジェクトを超えた test02_1.aspx.cs では値が入っ
いません。
しかし、Session.SessionIDはプロジェクトを超えても同じセッションIDが割り当てられています。

【質問内容】
・Sessionオブジェクトはプロジェクトを超えた場合、取得できないのでしょうか。
・もし、上記質問がYesならば、プロジェクトを超えて値を引き継ぐにはどうしたら
 よいでしょうか。
・そもそも、ソリューションとプロジェクトはどのように使い分ければよいのでしょう。
 (1アプリケーション1ソリューション、1業務単位1プロジェクトなど)

以上、ご教授の程よろしくお願いいたします。

[ メッセージ編集済み 編集者: にし 編集日時 2002-06-18 13:44 ]

[ メッセージ編集済み 編集者: にし 編集日時 2002-06-18 13:53 ]
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-06-18 20:50
またもや私見っぽい解答になってしまうので、間違いなどありましたらご指摘いただきたいです。

>・Sessionオブジェクトはプロジェクトを超えた場合、取得できないのでしょうか。
Sessionオブジェクトは特殊なオブジェクトで基本的に宣言などを必要としないようですが、私はASP.NETにおいては一種の「共有変数」の扱いだろうと思っています。そう考えるとSessionオブジェクトの中身はプロジェクトを超えた場合、取得できないということになります。

>もし、上記質問がYesならば、プロジェクトを超えて値を引き継ぐにはどうしたらよいでしょうか。

ASP.NETの定義上、『クラスはソリューションレベルで共有できる』となっています。プロジェクトが違っても、それぞれのクラスのメソッドやプロパティにはアクセスできますので、処理を行うことができるということになります。下は私が実際に使っているサンプルです。
--------------------------------------------------------------------------
'買い物籠セッション変数に選択されている商品の格納メソッド
Dim drv As DataRowView
WUri.WBasin(drv, Session("Sbasview"), PviewDD, 1, sizechk)
--------------------------------------------------------------------------
細かな所はさておきまして(苦笑)買い物籠用に使っているセッション変数を別プロジェクトのメソッドの引数とし、新しい商品を買い物籠セッション変数に格納する処理を行っています。こういった形での値の渡しは、可能です。

>・そもそも、ソリューションとプロジェクトはどのように使い分ければよいのでしょう。

ASP.NETにおいての話(すなわちWEBベースの話)だと考えていただきたいのですが、一つ一つのプロジェクトは『サイト』だと考えています。これは一般的な意味でもIIS的な用語とししてもです。
なので、ご質問にあるような表示系を伴う遷移において、プロジェクトが分かれているのは『サイトが2つあるのに1つのサイトのように扱っている』ということになります。この場合は、Gloabal.aspxの問題もあり、もちろんSessionオブジェクトは引き継がれないことになります。

一方でソリューションは、『クラス的に再利用が考えられるサイトの塊』と捉えられることになります。たとえば、ショッピングモールのサイトを構築する際には、一つ一つのショップサイトがプロジェクトであり、ショッピングモール全体がソリューションということになると思われます。XML WEBサービスという特例を除いてクラスは、ソリューションを超えて『普通には』参照できないことになりますので、ソリューションの概念も大事かと思われます。

以上、ご参考になりましたら幸いです。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 2002-06-20 11:02
うりゅうさん、色々ありがとうございます。
参考になりました。
まだこの件に関して、一部検証中でして、また分からないことが出てくるかもしれません。
そのときはまた、よろしくお願いします。
1

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