2009-11-02 55 views
1

這是我的情況:我將擁有一個帶有TreeView控件的網頁,該網頁應該是可展開/可摺疊/可編輯的。迄今爲止都很好。我知道回發在這個控制中被大量使用,這引起了另一個特定於我們生產設置的問題。TreeView和Postback

我們這裏有2個Web服務器和負載均衡器,負載均衡器不能正常工作,遺憾的是不能保證的頁面是會得到提交到同一臺服務器。換句話說,如果會話不記得你是誰,或者會話中保存的任何變量(如treeview viewstate)都會丟失,則可能會發生這種情況。

我要確保我的TreeView總是回發到同一臺服務器。我的解決方案是,首次加載的頁面獲取Web服務器的IP地址,並重寫所有鏈接/按鈕以專門指向該IP來繞過負載平衡器。樹視圖出現問題。我如何確保它始終回傳到相同的IP地址?

謝謝

回答

1

Viewstate存儲在窗體中,而不是存儲在會話變量中。如果您檢查頁面的html源代碼,您應該會看到一個「_viewstate」隱藏表單字段。

您可以嘗試使用卡西尼來幫助找出問題在本地機器上運行此。

此外,這是爲什麼會避免會話變量的又一個例子。存儲在會話中的任何內容也可以存儲在數據庫中,這也是應該在居住的地方。

+0

我認爲主要的問題是他正在處理一個負載平衡的環境。對於所有意圖和目的,視圖狀態和會話狀態將在存在錯誤配置的負載平衡器的情況下造成同樣的問題。 – gn22 2009-11-02 23:33:41

+0

^同上。我基本上無法在服務器上保存任何內容,無論是會話,視圖狀態還是其他任何內容。我基本上不能保證我的頁面會被髮回到同一個服務器,因此我不能依賴於服務器。 – sarsnake 2009-11-02 23:41:41

+0

使用適當的設置會話變量可以使用得很好。這已經成爲目前的行業標準。我認爲這取決於場景 - 如果每次頁面加載時都需要點擊數據庫,在某些情況下,這可能會變成一個大問題。正確配置的負載均衡器和會話變量相處得很好。 – sarsnake 2009-11-03 01:20:46

1

我認爲這裏的答案是克服負載均衡的情況下,沒本事解決它。

首先,僅僅是明確的,ViewState是整體而形成回發到服務器的數據,所以這是不是天生喜歡會話的數據的問題。也就是說,如果您的服務器設置正確,則可以成功執行跨服務器回發並保留Viewstate。有關共享機器密鑰或禁用Viewstate鍵控的信息,請參閱Jeff Atwood's blog entry

對於進程內會話,你當然不能,所以這可能仍然是一個大忌。什麼你應該做的是兩種:

  • 配置負載均衡器,支持會議的親和力,因此所有請求都在同一臺服務器
  • 使用SQL會話或不同的狀態服務器的Web服務器之間共享
+0

是的,我知道它需要修復。不幸的是,這不是我的責任和專業知識,整個情況讓我非常激動。我有點期望做服務器端編碼,而不能依賴服務器。 – sarsnake 2009-11-02 23:39:37

+0

我知道你的感受...我認爲你可以解決這個問題,但是如果你可以讓服務器接受其他視圖狀態並將任何其他會話級別的數據加載到你自己的數據庫存儲/檢索中。 – 2009-11-02 23:48:10

+0

謝謝:)我被告知,我不能使用數據庫存儲進行會話,因爲它是單點故障。有趣嗎? – sarsnake 2009-11-03 00:07:53