2014-09-29 73 views
2

我已經在網上購買了一個網絡域名,我在這裏託管了asp.net 網站/網絡應用程序的由於應用程序池空閒超時引起的視圖狀態MAC驗證失敗

很多時候,我面臨着一個錯誤:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster...... 

經過長期的研究後,我發現該錯誤的發生是由於「應用程序池空閒超時」

默認情況下,應用程序池將每5分鐘回收一次。如果此循環在用戶忙於站點併發回回到服務器時發生,則服務器不再識別會話/視圖狀態並拒絕回發內容。

我的「應用程序池空閒超時」值大約爲5分鐘。太短。

我接觸過的領域的人來改變超時時間,但他們拒絕這樣做,並稱其爲所有相同的,不能改變。

我GOOGLE了其他的解決方案,發現以下解決方案:

  1. 設置EnableViewStateMAC屬性設置爲false(不太好w.r.t.安全原因)。
  2. 提供您自己的驗證和解密密鑰「」(不起作用)。

請儘快給我提供一個更好的解決方案。

或者我應該更改域名管理器(如godaddy.com)。

回答

0

我以前見過並解決過這個問題。當您在Web Farm或Web羣集上託管應用程序時,主要出現此問題。

當頁面被呈現,其視圖狀態是加密服務器和發送到客戶端。當頁面回發時,這個視圖狀態數據在服務器上被解密以獲得頁面的狀態。對於ViewState服務器的加密和解密使用一些密鑰,如果Maching.config文件中未提供,則由服務器即時生成。

如果你是在一個單一的服務器託管環境中,這些按鍵會得到回收。但是在Web服務器場或Web羣集中,如果這些密鑰是隨機生成的,那麼它們對於每個服務器都不相同,並且來自一臺服務器的請求可以發回到具有不同密鑰集和失敗位置的另一臺服務器。

解決的辦法是添加的machineKey條目所有服務器的machine.config文件,或應用程序的web.config文件,以便每個服務器用於加密和視圖狀態的解密相同的密鑰。

+0

你能否給我提供一個例子... – Vishal 2014-12-15 20:01:14