- - PR -
セッションタイムアウト後にSession_Endイベントでの処理をしてから別アプリケーションへ遷移したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-02 15:32
>1.すでに呼ばれているのではないでしょうか。
>タイムアウト後の遷移イベントでSession_Endが呼び出されない、という条件の >とき、すでにタイムアウトによってSession_Endが呼ばれているので終了処理が >されている、ということはなかったですか。 おっしゃるとおり、既にタイムアウトによってSession_Endは一度呼ばれています。 ただし、クライアントのボタン押下イベントにより新しいSessionが張られるため、その時にSession_Startイベントが発生して初期処理が行われてしまっています。 そのため、やはり再びSession_Endにて終了処理が行われることを期待しています。 >2.呼ぶ必要があるのはどういう処理だった? >遷移イベントはボタン押下イベントで起こる、とのことですが、タイムアウト >後でしたら新しいセッションになってしまうので、終了処理はいらないのでは >ないでしょうか。Session以外に入れた情報をクリアしたいということでしょうか。 1と、次の3に対する回答で、こちらの回答にもなると思いますので省略させていただきます。 >3.もしかして、データベース接続ですか? >データベース接続を何らかの方法でキャッシュしているということでしょうか。 >ASP.NETでは、データベースへの接続をつかむ時間を最低限にするほうが、 >必ずではないけれど、よりよい状態になりやすいです。 データベース接続です。 ただし、DB接続をキャッシュするためではありません。 現在構築中のシステムは排他的に使用する別システムが存在するため、こちらのシステムが起動している時は別システムは起動できないように、起動管理テーブルにレコードを挿入しています。(この辺、もともとWindowsシステムだったために、顧客要求に無理があるとは思っております) こちらでSession_Start、Session_EndのたびにSession数をGlobalでカウントしています。 Session_Startではセッションカウンタをインクリメントし(セッションが1になる場合にレコード挿入)、終了時にはデクリメントし(セッションが0になる場合にレコード削除)てということを行っています。 >4.なぜ呼ばれないのか。 >なぜSession_Endが呼ばれないのかが提示された条件ではわかりませんでした。 >ボタン押下イベント、とはどういうコードだったのでしょうか。 サブシステムからメニュープロジェクトへ遷移するだけの単純なコードです。 元の状態を簡単に示しますと、以下のような感じです。 Private Sub cmdExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click 'Sessionの破棄 Session.Abandon() 'メニューへリダイレクトさせる Response.Redirect("/MENU/Menufrm.aspx", False) End Sub [ メッセージ編集済み 編集者: tpkr 編集日時 2004-12-02 15:34 ] | ||||
|
投稿日時: 2004-12-02 15:46
ご回答ありがとうございましした。
参考にさせていただきます。 _________________ たつごろー codeseek こみゅぷらす | ||||
|
投稿日時: 2004-12-02 22:04
どっちにしても、Session_Endが発生すると仮定するのは、よくないですね。セッション状態に、
とあります。インプロセスセッションモードの弊害は、アクセス集中などでプロセスが確保したメモリが大きくなると、プロセスが再起動してしまう=セッションが切れる、ということです。開発中の"今"は何ともないかもしれませんが、実運用で問題になったときを考えると? _________________ | ||||
|
投稿日時: 2004-12-06 13:35
Jittaさん、ご忠告ありがとうございます。
http://www.microsoft.com/japan/msdn/enterprise/pag/diforwc-ch05.asp この辺をいまさら読んでみて、結構設計段階から間違ってしまった感を痛感しつつあります。 設計段階から関わったのは初めてなのですが、ちょっと考え直した方が良い気がしてきました。 いたた・・・ |