簡體   English   中英

獲取 ViewStateException:無效的視圖狀態,而機器鍵相同

[英]Getting ViewStateException: Invalid viewstate while Machine keys are the same

我在 LB 后面有 8 台主機,它們都是單進程(不是網絡花園)。 盡管如下所示使用 iis 中的相同機器密鑰設置所有它們,但我仍然很少收到無效的視圖狀態異常。

在此處輸入圖片說明

有類似的問題,但沒有一個對我有幫助(我沒有像其他問題那樣有待更新或重啟的服務器,或者我沒有使用 server.execute 等)。 所以請不要標記為重復。 有沒有其他方法可以防止這種異常?

謝謝

通常,這是因為不同服務器的機器密鑰不同。 我們使用 Web Farm 來實現高可用性。 在這種情況下,如果客戶端發送請求,則負載均衡器決定為請求提供服務的網絡服務器。 多次發生另一個請求可能由另一個服務器提供服務的情況。 所以這就是問題所在。

眾所周知,view stat 是客戶端狀態管理技術,數據隨着請求和響應而傳輸。 因此,如果視圖狀態是用某個機器密鑰加密的,並且在其他請求中,如果由另一台服務器處理並且具有不同的機器密鑰,它將無法解密它,並且會通過錯誤。

每個服務器在設置為 auto 時都會生成一個新密鑰。 甚至有時應用域的任何回收都會在設置為自動時生成一個新密鑰。 這意味着我們不能使用默認的自動生成的密鑰。 所以這里的解決方案是在 machine.config 中使用特定的密鑰來防止在每個進程啟動時自動生成密鑰。

然而,另一種靈活的方法是將 MachineKey 部分添加到您網站的 web.config 文件中。 這不需要在每個 Web 服務器上進行更改。

另一種方法是您可以嘗試在 machine.config 中設置以下代碼:

enableViewStateMac="false"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM