C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: ASP.NET Applicationオブジェクトについて


(過去ログ 61 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■35240 / inTopicNo.1)  ASP.NET Applicationオブジェクトについて
  
□投稿者/ ooo (31回)-(2009/04/22(Wed) 18:04:25)

分類:[.NET 全般] 

お世話になります。

VS2005
ASP.NET2.0
VB.NET
にて開発しています。

今回はApplicationオブジェクトについてのトピックです。

以下の如くログイン時にApplicationオブジェクトにIDを格納しているのですが、

********************************************************************
Dim strLoginID As String = HttpContext.Current.User.Identity.Name

'【ログイン管理情報の登録】
Application(strLoginID) = strSessionID
********************************************************************

あるタイミングで、Application(strLoginID)オブジェクトが破棄されNothingとなります。
ソースコード上明示的にオブジェクトを破棄しているのはログアウトされた際のみ以下のコードで
オブジェクトを破棄していますが、他のタイミングでは破棄されないはずなのですが・・・

********************************************************************
Application.Remove(strLoginID)
********************************************************************

上記コードにブレークを貼って確認しましたが、Application.Removeする際にはすでにオブジェクトが破棄されており
例外エラーとなります。

しかも、破棄されるケースがわからない再現するケースがわからない状態です。

おそらくですが、Applicationオブジェクトには何かがきっかけで破棄されるタイミングがあるのではないかと考えております。
参考情報でも構いませんので、どなたか、心当たりがある方いらっしゃいましたら、ご教示ください。

引用返信 編集キー/
■35244 / inTopicNo.2)  Re[1]: ASP.NET Applicationオブジェクトについて
□投稿者/ Jitta on the way (305回)-(2009/04/22(Wed) 19:11:48)
No35240 (ooo さん) に返信

Application オブジェクトは、サーバーに1つしかありません。

Application は、様々な理由で再起動します。
引用返信 編集キー/
■35254 / inTopicNo.3)  Re[2]: ASP.NET Applicationオブジェクトについて
□投稿者/ ooo (32回)-(2009/04/22(Wed) 20:59:09)
No35244 (Jitta on the way さん) に返信

すみません。

その様々な理由を一つでも良いので知っていたら教示願えませんでしょうか?
引用返信 編集キー/
■35265 / inTopicNo.4)  Re[3]: ASP.NET Applicationオブジェクトについて
□投稿者/ Jitta on the way (309回)-(2009/04/23(Thu) 07:39:08)
No35254 (ooo さん) に返信
> ■No35244 (Jitta on the way さん) に返信
>
> すみません。
>
> その様々な理由を一つでも良いので知っていたら教示願えませんでしょうか?

デフォルトでは、物理メモリの60%に相当するメモリを確保すると、再起動します。勿論、60%を越えたからすぐに再起動、じゃないですよ。
その他、MSDN ライブラリを「プロセスのリサイクル」で検索してみて下さい。 それで見つからなければ、「インプロセス セッション」で検索。
引用返信 編集キー/
■35270 / inTopicNo.5)  Re[4]: ASP.NET Applicationオブジェクトについて
□投稿者/ ooo (33回)-(2009/04/23(Thu) 09:48:10)
2009/04/23(Thu) 09:49:58 編集(投稿者)
2009/04/23(Thu) 09:49:46 編集(投稿者)

教示ありがとうございます。最初に申し上げましたとおり、Applicationオブジェクトを使用して、ログインの判定を行っています。
ログインコントロールを使用してログインを行った際にApplicationオブジェクトにSession.SessionIDを格納しているのですが、
Applicationオブジェクトが様々な要因で再起動されるのであれば、Applicationオブジェクトを使用すること自体を見直すべきだと考えています。

顧客側より、タイムアウトしていないのにも関わらずログインページに戻されるというクレームが来ています。
おそらく設計者はApplicationオブジェクトとsessionStateのtimeout値が連動していると考えているように思われるのですが。
いかがでしょうか?(timeout値を延ばせばログアウトしないと考えている)

実際、自身としてはApplicationオブジェクトとsession変数は別物だと考えていますがこの認識は誤っていますでしょうか?

また、Applicationオブジェクトが再起動されるタイミングのイベントをビジネスロジック側でキャッチできますでしょうか?

質問ばかりで申し訳ないのですが、参考情報でも構いませんので教示願えたら幸いです。

引用返信 編集キー/
■35277 / inTopicNo.6)  Re[5]: ASP.NET Applicationオブジェクトについて
□投稿者/ 渋木宏明(ひどり) (1125回)-(2009/04/23(Thu) 10:45:44)
渋木宏明(ひどり) さんの Web サイト
2009/04/23(Thu) 11:02:14 編集(投稿者)

> 教示ありがとうございます。最初に申し上げましたとおり、Applicationオブジェクトを使用して、ログインの判定を行っています。
> ログインコントロールを使用してログインを行った際にApplicationオブジェクトにSession.SessionIDを格納しているのですが、

そんなことして大丈夫ですか?

Application オブジェクトって、同じアプリケーションドメインで実行される ASP.NET アプリケーション全体で共有ですよ。

複数ユーザの利用に耐えるように考慮してますか?

あと、仮に対策がしてあったとしても、システム増強で物理的に Web サーバを増やすような場合などにまるで対応できません。

# Web サーバ1台でも、プロセスプーリングしたらもうだめだっけ?
引用返信 編集キー/
■35278 / inTopicNo.7)  Re[6]: ASP.NET Applicationオブジェクトについて
□投稿者/ かずき (30回)-(2009/04/23(Thu) 11:27:23)
今起きてる現象は、多分以下の手順で起きると思います。

1. Aさんがログイン
2. Bさんがログイン
3. AさんとBさんが適当にシステムを使う
4. Aさんがログアウト
5. Bさんが認証情報を必要とする処理を実行(ログアウトするだけでもいいかな)

どうでしょう?
もし、上記手順で起きるなら、今まで皆さんが指摘されている
> Application オブジェクトって、同じアプリケーションドメインで実行される ASP.NET アプリケーション全体で共有ですよ。

について見てみるのがいいと思います。
引用返信 編集キー/
■35279 / inTopicNo.8)  Re[7]: ASP.NET Applicationオブジェクトについて
□投稿者/ かずき (31回)-(2009/04/23(Thu) 11:32:23)
No35278 (かずき さん) に返信
> 今起きてる現象は、多分以下の手順で起きると思います。
>
> 1. Aさんがログイン
> 2. Bさんがログイン
> 3. AさんとBさんが適当にシステムを使う
> 4. Aさんがログアウト
> 5. Bさんが認証情報を必要とする処理を実行(ログアウトするだけでもいいかな)
>
> どうでしょう?
> もし、上記手順で起きるなら、今まで皆さんが指摘されている
>>Application オブジェクトって、同じアプリケーションドメインで実行される ASP.NET アプリケーション全体で共有ですよ。
>
> について見てみるのがいいと思います。
間違えたorz

AさんとBさんが同じユーザアカウントでログインしたら起きると思います。

引用返信 編集キー/
■35280 / inTopicNo.9)  Re[8]: ASP.NET Applicationオブジェクトについて
□投稿者/ なちゃ (273回)-(2009/04/23(Thu) 11:50:13)
Applicationオブジェクトは、状態をずっと確実に保持するような使い方は出来ません。
というか、そういう使い方が出来るのはセッションとか認証チケット埋め込みの情報だけです。
#工夫して独自に実装はできるとしても

サーバー側でのステート保持はそれくらい制限されるものだと思ってください。
引用返信 編集キー/
■35297 / inTopicNo.10)  Re[5]: ASP.NET Applicationオブジェクトについて
□投稿者/ Jitta on the way (311回)-(2009/04/23(Thu) 18:36:38)
No35270 (ooo さん) に返信

> 教示ありがとうございます。最初に申し上げましたとおり、Applicationオブジェクトを使用して、ログインの判定を行っています。

はい。ですから、Applicationオブジェクトは、アプリケーションで1つしかありません、と書きました。
複数の人がアクセスすると、セッションIDが混乱します。


> ログインコントロールを使用してログインを行った際にApplicationオブジェクトにSession.SessionIDを格納しているのですが、

なぜ、セッションIDを保存しなければならないのでしょう?また、一時期に複数のセッションが存在します。そのことは、どうするおつもりでしょう?


> Applicationオブジェクトが様々な要因で再起動されるのであれば、Applicationオブジェクトを使用すること自体を見直すべきだと考えています。

それは、目的によります。


> 顧客側より、タイムアウトしていないのにも関わらずログインページに戻されるというクレームが来ています。
> おそらく設計者はApplicationオブジェクトとsessionStateのtimeout値が連動していると考えているように思われるのですが。
> いかがでしょうか?(timeout値を延ばせばログアウトしないと考えている)
>
> 実際、自身としてはApplicationオブジェクトとsession変数は別物だと考えていますがこの認識は誤っていますでしょうか?

セッションIDを保存する目的がわからないと、なんとも。
なんにしても、必要な知識なしにWeb Applicationの開発を行ったのではないかと思われます。
ログインにしても、チケットをクッキーに入れていれば、セッションの持続時間とは別にログインの状態を管理できます。どの様な管理を行なっているのでしょう?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -