3台服务器上的ViewState错误

时间:2015-01-13 10:47:29

标签: hibernate iis timeout viewstate

我们有3个服务器设置..其中两个具有几乎相同的IIS配置和一个服务器设置略有不同。

所有3台服务器都运行相同的应用程序,但是当一个人休眠他们的PC并重新尝试登录时(在20分钟后再说),两个副本上运行相同的应用程序就会出现ViewState错误。

这只发生在2/3服务器上..我已经比较了所有三台服务器的配置,并且很难找到viewstate错误背后的推理。

在两个副本(非群集,只运行两个单独的应用程序实例的副本配置)服务器上,在用户休眠其PC并尝试返回页面刷新后生成以下错误:

********** 18/11/2014 22:01:40 **********

Inner Exception Type: System.Web.UI.ViewStateException

Inner Exception: Invalid viewstate.

                Client IP: HIDDEN

                Port: 61727

                Referer: HIDDEN

                Path: /WERWER/Loginpage.aspx

                User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

                ViewState: /wEPDwUJMTU3NDQ3OTA5D2QWAgIDD2QWBgIFDxYCHgRUZXh0BQczLjEuNC4zZAIJDxAPFgIeC18hRGF0YUJvdW5kZ2QPFgICAQICFgIQBQtBc3RyYVplbmVjYQUBMWcQBQtBc3RyYVplbmVjcQUBMmdkZAILDw9kDxAWAWYWARYCHg5QYXJhbWV0ZXJWYWx1ZWQWAQIDZGRkfcrsQ9t3t1viPYtGtlL9zhltvqca0XJ8+sAMNb9FJhc=

Inner Source:

Exception Type: System.Web.HttpException

Exception: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.



See http://go.microsoft.com/fwlink/?LinkID=314055 for more information.

Source: Application_Error - Global.asax

Stack Trace:

   at System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState)

   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose)

   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 formatter, String serializedState, Purpose purpose)

   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.ProcessRequest(HttpContext context)

   at ASP.scairlogin_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\appdir\405a4e54\e0bdc3da\App_Web_qp5t5y2q.3.cs:line 0

   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Another Occasion::

********** 16/10/2014 11:29:06 **********

Inner Exception Type: System.Web.UI.ViewStateException

Inner Exception: Invalid viewstate.

                Client IP: hidden

                Port: 63887

                Referer: hidden

                Path: HIDDEN

                User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

                ViewState: /wEPDwUJMTU3NDQ3OTA5D2QWAgIDD2QWBgIFDxYCHgRUZXh0BQczLjEuNC40ZAIJDxAPFgIeC18hRGF0YUJvdW5kZ2QPFgECARYBEAUGU2Fub2ZpBQE1Z2RkAgsPD2QPEBYBZhYBFgIeDlBhcmFtZXRlclZhbHVlZBYBAgNkZGQOSDDVejjm6GAjbB7Ke9jTxN8jwI+kH3Hw9hzBkL2Oug==

Inner Source:

Exception Type: System.Web.HttpException

Exception: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.



See http://go.microsoft.com/fwlink/?LinkID=314055 for more information.

Source: Application_Error - Global.asax

Stack Trace:

   at System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState)

   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose)

   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 formatter, String serializedState, Purpose purpose)

   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.ProcessRequest(HttpContext context)

   at ASP.scairlogin_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\scair\405a4e54\e0bdc3da\App_Web_uhtljwwn.1.cs:line 0

   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

任何人都可以提供帮助吗?

仅供参考:以下是最终用户对情况的描述:

  

“好的 - 我检查了服务器并用浏览器将我的电脑休眠了   窗口在登录页面打开。

     

30分钟后重新启动计算机,重新登录并获得了   我在另一台副本服务器上看到的异常消息...

我工作的人注意到我可以通过设置固定的机器密钥来解决问题 - 我将哪个机器密钥设置为'固定'?似乎有三个级别(您可以从顶级IIS结构设置的机器密钥,可以从网站级别设置的密钥,以及可以从虚拟站点级别设置的密钥?)

我要更改哪个键?什么是3个“机器钥匙”配置的需要?

非常感谢!

2 个答案:

答案 0 :(得分:0)

随时更改您选择的内容。但请确保所有服务器应用程序都看到相同的machineKey。

有多种配置级别,您可以在

上进行设置
  • 机器级别
  • 所有应用程序级别
  • 一个应用程序级别

答案 1 :(得分:0)

正确..这是一个更新,如果可能的话,我非常感谢你的回复。

<强>问题: 当空闲20分钟并且当用户尝试重新登录时,他/她将看到ViewState错误。

初步了解: 当应用程序池在“Webadmin”标识下重新启动时,无法读取某些内容

从Microsoft支持线程中提取 当应用程序池在用户帐户下运行时,不会生成上述密钥,从而导致间歇性的无效视图状态错误。

<强>解决方案: 在web.conf中指定手动机器密钥,这解决了问题。

结果期望: 为了能够解释为什么当应用程序池作为用户运行时,在“机器密钥”配置中为每个应用程序选项使用AutoGenerate / Unique时会出现viewstate错误。

1)在web.conf中指定静态密钥时是否存在任何安全风险

2)为什么在不同用户下运行应用程序池时无法生成计算机密钥。

3)为什么在作为DefaultAppPool用户运行时不会出现问题?