InProc セッションがセッション オブジェクトを削除する原因に関する情報は山ほどありますが、ここで起こっているのはそれではありません。安定した InProc セッション オブジェクト内の個々の変数が欠落しており、それらが書き込まれていないのか、書き込みが成功した後に失われたのかはわかりません。セッションがライブであり、セッションに書き込まれたデータのすべてではなく一部が含まれていることを WinDBG で確認しました。
Guid g = System.Guid.NewGuid();
this.Context.Session.Add(g.ToString(), result.ImageData);
output.Write("<img src=\"display.aspx?id=" + g.ToString() + "\">");
このコードは非常に簡単で、テストでは問題なく動作します。ただし、本番環境では負荷が高い場合、約 1% の確率で失敗します。Smith 氏がサイトにアクセスして 4 つの画像データを表示しようとすると、そのうち 2 つがセッションに保存され、2 つが失われる可能性があります。
Mr. Smith の InProc セッション オブジェクトが存在します。トラフィック ログは、彼が 4 回クリックしたことを示しており、それぞれに異なる id パラメータが付けられています。しかし、彼の InProc セッション オブジェクトには 4 つではなく 2 つの GUID しかありません。キャプチャした 2 つのセッション オブジェクトは、トラフィック ログに表示されている 2 つの ID に対応しています (彼の 1 回目と 3 回目のクリック)。ただし、4 回目のクリックでは、彼の InProc セッション オブジェクトにない GUID ID が表示されます。
上記のコードの 1 行目と 3 行目は、2 回目と 4 回目のクリックで明らかに機能しました。ただし、2 行目は何らかの理由で静かに失敗したようです。何らかの例外がスローされた場合、3 行目に到達することはなかったと思います。ユーザーが GUID ID を受け取る方法はわかりませんが、セッションはそれを取得できません。もう1つの可能性は、2行目は正常に機能しましたが、後で変数が消えたということです。想像もできません。
他に考えられる人はいますか?または、このような問題を再現する方法についての提案はありますか?
詳細: ASP.NET v3.5 IIS 6 Web ガーデニングなし Web ファームを実行していますが、ユーザーは常に同じサーバーに戻ってきます。ユーザーが他のサーバーにすり抜ける可能性があるかどうか、現在調査中です。