2011-01-12 28 views
3

私は自分のWebアプリケーション(ClassicモードではIIS7)への一連の呼び出しを行っています。最初の2つの呼び出しはオブジェクトをインスタンス化し、Sessionオブジェクトに配置します。IIS7のセッションからオブジェクトが消えるのはなぜですか?

私が3回目の呼び出しを行うまでに、セッションにはオブジェクトがありません。セッション中に2つのキーがあると思いますが、1つしかありません。

作成されているセッションはほぼ同じです。注目すべきことは、これは多く発生することです.100%繰り返し可能ではない、つまりすべてがうまく動作することがあります。

オブジェクトは大きいですが、巨大ではありません(約100個の小さな文字列)ので、セッションサイズを最大限に活用することはできません。私はそこに他のオブジェクトを入れていません。

+0

通話時間はどのくらいですか?あなたのセッションはタイムアウトしましたか?以前に保存された値にアクセスするために正しいキーを使用していますか(キーでは大文字と小文字が区別されます)。デバッガを使ってSessionオブジェクトの内容を調べたことがありますか? – slugster

+0

Slugsterが言ったこと。また、あなたはセッションを永続させていますか?メモリ(InProc)、データベース、または他の場所で...? – 5arx

+0

呼び出しは連続して連続して連続しています。セッションキーは数値で、デバッガでセッションを検査して、キーが1つしかないことを確認しています。 – izb

答えて

1

私はそれを解決しました(シトロナスからのglobal.asaxの助けを借りて)。

これまでのように、私は自分の疑問や、私が想定していたほどの真実ではないことを主張していることが判明しました。

最初の2回の呼び出しは実際にシリアルで行われませんが、2回目の呼び出しは最初の呼び出しが返される前に行われています。これにより、2つのSession_Start呼び出し(興味深いことに、同じセッションID)が発生しました。したがって、最初のセッションデータは上書きされていました。

各コールが返されるのを待つようにアプリを変更すると、問題が解決しました。

回答またはコメントをいただいたすべての方に感謝します。

2

あなたが気付いていない未処理の例外をexpierieniencingしているように思えます。そのような例外が発生すると、セッションは破棄されます。 Application_OnError、のSession_Endとのsession_start方法にGlobal.asaxの中

ブレークポイントを設定し、それらのための1が消え

+0

確かに、セッションが「処理されないたびに*すべてのために破棄されません」という例外はありますか?私はいくつかの可能性を想像することができますが、私は未処理の例外の後にセッションがそのまま残っていることをかなり確信しています。 – Chris

+0

私の答えはInProcセッションにのみ適用されると思います。 Unfortunetly私はそのMSDNから引用符を付けることはできません – citronas

0

、最初のまたは追加の最新情報をチェックするには?あなたのアプリケーションは、最初の呼び出しの後にリサイクルされているように見えるので、最初に追加されたものは消去されます。

関連する問題