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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.35240 の関連記事表示

<< 0 >>
■35240  ASP.NET Applicationオブジェクトについて
□投稿者/ ooo -(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オブジェクトには何かがきっかけで破棄されるタイミングがあるのではないかと考えております。
    参考情報でも構いませんので、どなたか、心当たりがある方いらっしゃいましたら、ご教示ください。
親記事 /過去ログ61より / 関連記事表示
削除チェック/

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

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

    Application は、様々な理由で再起動します。
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

■35254  Re[2]: ASP.NET Applicationオブジェクトについて
□投稿者/ ooo -(2009/04/22(Wed) 20:59:09)
    No35244 (Jitta on the way さん) に返信

    すみません。

    その様々な理由を一つでも良いので知っていたら教示願えませんでしょうか?
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

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

    デフォルトでは、物理メモリの60%に相当するメモリを確保すると、再起動します。勿論、60%を越えたからすぐに再起動、じゃないですよ。
    その他、MSDN ライブラリを「プロセスのリサイクル」で検索してみて下さい。 それで見つからなければ、「インプロセス セッション」で検索。
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

■35270  Re[4]: ASP.NET Applicationオブジェクトについて
□投稿者/ ooo -(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オブジェクトが再起動されるタイミングのイベントをビジネスロジック側でキャッチできますでしょうか?

    質問ばかりで申し訳ないのですが、参考情報でも構いませんので教示願えたら幸いです。
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

■35277  Re[5]: ASP.NET Applicationオブジェクトについて
□投稿者/ 渋木宏明(ひどり) -(2009/04/23(Thu) 10:45:44)
>
    2009/04/23(Thu) 11:02:14 編集(投稿者)

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

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

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

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

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

    # Web サーバ1台でも、プロセスプーリングしたらもうだめだっけ?
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

■35278  Re[6]: ASP.NET Applicationオブジェクトについて
□投稿者/ かずき -(2009/04/23(Thu) 11:27:23)
    今起きてる現象は、多分以下の手順で起きると思います。

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

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

    について見てみるのがいいと思います。
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

■35279  Re[7]: ASP.NET Applicationオブジェクトについて
□投稿者/ かずき -(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さんが同じユーザアカウントでログインしたら起きると思います。
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

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

    サーバー側でのステート保持はそれくらい制限されるものだと思ってください。
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/

■35297  Re[5]: ASP.NET Applicationオブジェクトについて
□投稿者/ Jitta on the way -(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の開発を行ったのではないかと思われます。
    ログインにしても、チケットをクッキーに入れていれば、セッションの持続時間とは別にログインの状態を管理できます。どの様な管理を行なっているのでしょう?
記事No.35240 のレス /過去ログ61より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -