2011-07-27 150 views
2

我有一個坐在兩個web服務器(IIS)上的ASP.NET 3.5 webforms應用程序,並通過具有粘性親和力的內容切換進行負載平衡。我有一個將數據放入會話變量的頁面,javascript會打開一個新的瀏覽器窗口,並在該頁面的page_load事件中檢索該會話變量並顯示數據。會話狀態奇怪的行爲

問題是,在所有版本的IE中,大約有十分之七的數據沒有顯示。如果我不斷刷新新打開的窗口,它將最終顯示數據。我可以驗證在瀏覽器窗口打開之前,會話變量是有效的。

另一個麻煩就是firefox沒有這個問題。數據在第一次100%時顯示。問題是我們沒有(正式)支持Firefox。

我們無權訪問任何第三方數據存儲(如MSSQL或MySQL),因此在此處存儲會話數據不存在選項。另外,緩存數據客戶端的能力並不實際,在某些情況下不是一種選擇。

這不會發生在本地或我們的測試環境(這是不負載平衡),所以我真的很困惑。任何幫助將不勝感激。

謝謝。

+0

所有版本的IE?我期望這在IE8,因爲每個瀏覽器選項卡/窗口創建一個新的會話,但在IE8之前,我會預計它的工作。 –

回答

3

您使用哪種會話存儲提供程序? InProc,StateServer?它聽起來像你使用InProc。如果是這樣,由於您無法訪問數據庫,切換到StateServer可能是您的答案。

這裏有一篇關於ASP.NET load balancing and ASP.NET state server的文章,可能對您有所幫助。

+0

但是,爲什麼它會在Firefox中正常工作,但不是所有的東西都是平等的? – pattyboy1971

+0

可能是由於負載均衡器處理服務器關聯(可能是ip,cookie或基於響應頭)以及不同瀏覽器是否將該信息從新窗口傳遞迴服務器。 –

+0

感謝您的幫助。我將看看狀態服務器選項,並讓你知道它是如何工作的。 – pattyboy1971

1

你提到你正在使用粘滯會話/親和力。您是否可以確認您的負載均衡器正在查看HTTP Cookie(不僅是IP地址)以確定粘性,因爲在單個會話期間IP地址可能會發生變化(例如,在有線和無線網絡之間對接筆記本電腦)。

+0

我會仔細檢查網絡管理員。 – pattyboy1971

+0

很抱歉忘了提及我們使用的是端口443和SSL,所以我們必須使用IP。 – pattyboy1971

+0

那麼這可能是你的問題。您必須使用其他答案中提到的狀態服務器。 –