2017-06-14 77 views
2

驗證視圖狀態MAC失敗。如果此應用程序由Web Farm或羣集託管,請確保配置指定相同的驗證密鑰和驗證算法。 AutoGenerate不能在羣集中使用。當用戶不回覆30分鐘以上時,如何防止「驗證視圖狀態MAC失敗」錯誤?

我試圖找到一種方法來防止此錯誤。它發生在我的網站上,當用戶離開頁面打開30多分鐘並觸發回發事件。我理解這個錯誤的方式和我的問題是,應用程序池已經回收並且viewstate不再有效。我不知道如何解決這個問題,而不會讓會話保持活躍狀態​​並浪費資源來做到這一點......任何完成此任務的聰明方法?

+0

在該頁面上完全禁用ViewState。無論如何,你可能並不真的需要它。 – VDWWD

回答

2

根據this頁面有4個原因,你可能會得到這樣的錯誤:(多服務器環境)

  1. 應用程序運行在一個農場
  2. 工作進程使用IIS 7.0 *應用通過使用LoadUserProfile = false
  3. Page.ViewStateUserKey屬性配置池標識
  4. 應用程序池具有不正確的值

*注意:根據文章,這已不再是從IIS 7.5開始的問題。

大圖

問題的大畫面是用於加密視圖狀態數據的加密密鑰不被持續(對於上述那些中的一個或組合的這些原因),因此,新的加密密鑰是產生的不符合原來的一個。您可以通過幾種方法持久保存此密鑰(或讓您的應用程序使用正確的密鑰)。見下面的解決方案

解決方案

  1. 手動設置的machineKey在web.config中
  2. 使用ASPNET_REGIIS實用程序來運行託管應用程序,其中機鍵將被保留。
  3. 運行PowerShell腳本以在HKLM註冊表中保存機器密鑰,而不是在HKCU註冊表中。
  4. 設置LoadUserProfile = true使HKCU註冊表配置單元可用於應用程序。
  5. 檢查Page.ViewStateUserKey屬性的正確性,以查看消費值是否與生成密鑰時的值(即,如果使用此屬性)匹配。

這是一個快速概述。有關該問題的任何原因(以及#3中的PowerShell腳本)的更多詳細信息或該問題的解決方案,請查看文章以排查您的特定情況並選擇最適合您的用途的解決方案。

相關問題