2011-10-05 88 views
2

好的,這個話題在互聯網上並不是新鮮事,我明白了。但我還沒有找到解決方案來解決我的問題。視圖狀態MAC驗證失敗,每天失敗50次

問題是我一直在我的網站上捕捉到這個異常。也許每天50次左右。 (請參閱下面的堆棧跟蹤)

驗證視圖狀態MAC失敗。如果此應用程序由Web Farm或羣集託管,請確保配置指定相同的驗證密鑰和驗證算法。 AutoGenerate不能在羣集中使用。

我已經在我的web.config文件中預定義了一個machinekey - 根本沒有任何幫助。 然後我讀了一些地方,我可能是一個緩慢的加載造成的錯誤,但我記錄頁面加載時間,並且當這個錯誤發生時,theres沒有什麼驚人的。 一些ppl建議禁用視圖狀態解密,但是作爲很多其他ppl寫入,這不是一個真正的解決方案。

任何人都知道該怎麼辦?

堆棧跟蹤:

at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) 
at System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState) 
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) 
at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) 
at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) 
at System.Web.UI.HiddenFieldPageStatePersister.Load() 
at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() 
at System.Web.UI.Page.LoadAllState() 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
at System.Web.UI.Page.ProcessRequest() 
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) 
at System.Web.UI.Page.ProcessRequest(HttpContext context) 
at ASP.default_aspx.ProcessRequest(HttpContext context) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
+0

您是否在Web場或羣集中運行?有多臺服務器? – Tejo

+0

您是否試圖捕獲失敗的視圖狀態並查看其中的內容? – toxaq

+0

我剛剛在我的本地主機上調試時第一次出錯,不知道爲什麼想到,但至少我可以說我的本地主機不在網絡農場。我試圖捕捉不到,但生病了! –

回答

0

您需要添加一臺機器鑰匙插入的web.config

即 <的System.Web> <的machineKey解密= 「AES」 驗證= 「SHA1」 decryptionKey = 「875CF3B9B54E7058CE31EAFAB05AD19400FF3DA5CDB0D324D7433C4B233B350D」 的validationKey = 「5BC50363620E53177C8E7E81BE1CF13141F860C5E41AF3EEEFC82AA37160E82D」/>

原因是THA t在Web場中,您看到的頁面可能由不同的機器提供,而不是您回發的機器,並且視圖狀態/ cookie等的解密將不匹配,除非其場中的場匹配machineKeys的所有者不太可能)。在單個服務器環境中,此密鑰是自動生成的,但它永不重要,因爲應用程序池總是知道它自己的密鑰

+0

我已經在我的web.config文件中預定義了一個machinekey –