3 台服务器上的视图状态错误



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

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

这只发生在 2/3 的服务器上。我已经比较了所有三个服务器的配置,并且正在努力寻找视图状态错误背后的原因。

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

********** 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._aspx.ProcessRequest(HttpContext context) in c:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Filesappdir405a4e54e0bdc3daApp_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: /+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._aspx.ProcessRequest(HttpContext context) in c:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Files\405a4e54e0bdc3daApp_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 个单独的"机器钥匙"配置需要什么?

非常感谢!

只需更改您选择的任何内容即可。但请确保在所有服务器上应用程序都看到相同的机器密钥。

有多个级别的配置,因此您可以对其进行设置

  • 机器级别
  • 所有应用程序级别
  • 一个应用程序级别

对..特此更新,如果可能的话,我将非常感谢您的回复。

问题:空闲 20 分钟且用户尝试重新登录时,他/她会显示视图状态错误。

初步了解:在"Webadmin"标识下重新启动应用程序池时,不会读取某些内容

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

溶液:在 web.conf 中指定手动计算机密钥,这解决了问题。

结果预期:为了能够喘息为什么当应用程序池以用户身份运行时,我们在"机器密钥"配置中的每个应用程序选项使用自动生成/唯一时会出现视图状态错误。

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

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

3) 为什么以默认应用程序池用户身份运行时不会出现此问题?

相关内容

  • 没有找到相关文章

最新更新