无效的ViewState错误

18

我在ScriptResource.axd方面遇到了无效的viewstate错误。想知道是否有人能帮我解决这个问题。错误信息如下:

2009-02-24 09:46:30,021 [13] DEBUG ASP.global_asax [(null)] - 请求开始 - URL: /Web/ScriptResource.axd?d=E9hlvtsn8Gr1MyjysW1gFDFYr4CVwstY-sC22tRu5V8d7UyEYz3FhVYGrlhY87n2ihgKh58RrMRhK-Yk2WcQahEaCg_asTInqHK
2009-02-24 09:46:30,021 [13] DEBUG ASP.global_asax [(null)] - Application_AuthenticateRequest已启动
2009-02-24 09:46:30,021 [13] ERROR ASP.global_asax [(null)] - 意外错误。用户呈现网站错误页面。
System.Web.HttpException: Invalid viewstate.
   at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType)
   at System.Web.UI.Page.DecryptString(String s)
   at System.Web.Handlers.ScriptResourceHandler.DecryptParameter(NameValueCollection queryString)
   at System.Web.Handlers.ScriptResourceHandler.ProcessRequestInternal(HttpResponse response, NameValueCollection queryString, VirtualFileReader fileReader)
   at System.Web.Handlers.ScriptResourceHandler.ProcessRequest(HttpContext context)
   at System.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

这个错误在生产环境中出现。我无法在开发或测试环境中重现此问题。同时,只有经过身份验证的用户才能访问这些页面。如果你能对此事提供一些帮助,我将不胜感激。


你在生产环境中使用Web Farm吗? - Tsvetomir Tsonev
9个回答

5
我认为这些错误发生的原因因浏览器而异,这就使得追踪问题变得异常困难。 IE8 Bug 微软已经表示,IE8中的一个Bug会(在某些情况下)生成伪造的请求发送到服务器,不会影响用户,但会在服务器端记录错误。
请参见此处的讨论:Bug IE8 – 4K dropped - "Invalid viewstate" when loading ScriptResource.axd。特别是看看EricLaw-MSFT的更新信息,他说:

值得一提的是,任何在IE6 / IE7或Firefox中遇到问题的人都会遇到与以下所述IE8问题无关的不同问题。

此篇博客文章也描述了这些错误:IE8前瞻下载器中的错误
他们说改变设置Content-Type的方式将有助于修复部分错误,尽管并非所有错误都可以被修复。他们说这是由各种模糊的情况引起的,他们仍在研究中。 更新:截至2010年04月01日,这些IE8 Bug已通过IE8累积更新(KB980182)修复。
此篇博客文章:IE8前瞻下载器已修复更详细地介绍了这些Bug以及其他可能的/部分解决方法(例如此处),而不是等待全世界的人都下载并安装修复程序。 其他浏览器 尚未找出原因,但其他浏览器也会生成这些错误,可能是由不同的原因引起的。 Web Farms 这个问题不仅限于运行在Web Farm上的网站,但如果您正在运行Farm,请查看jesal的答案,这可能会有所帮助。

2

如前所述,如果您正在使用Web Farm,并且机器密钥不同步,可能会出现此问题。

另一个可能性是程序集日期在未来。这会导致各种难以理解的问题,值得检查。也许您的服务器位于不同的时区?


1
我建议看一下this...它基本上概述了一些情况,这取决于文档类型。我们遇到了类似的问题,它似乎只是偶尔出现...对我们来说,这是XHTML文档类型和页面上的javascript之间的冲突。我们通过确保所有的javascript都正确地包含在

1

微软建议不要使用meta标签声明字符集,而是将其设置为HTTP头。

因此,请删除

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">

并添加

Response.AddHeader("Content-Type", "text/html; charset=utf-8");


这对于一些情况可能会有帮助,但并不适用于所有情况。 - EricLaw

0

我也遇到了同样的错误,实际上这些错误是在最近一个月或两个月内开始出现的,在我们的几个网站上都发生了这种情况,而且自去年12月以来我们并没有对它们进行任何更改。这让我认为可能是配置更改或Windows更新导致的。


0

这里也出现了同样的错误: User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 6.0; Trident/4.0; GTB5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)

我尝试修改/删除文档类型声明,并将JavaScript包装在//<![CDATA[中,但仍然出现异常...

目前所有内容都来自同一个IP地址


这是同样的IE8错误。请注意UA字符串中的“Trident/4.0”。 - EricLaw

0
如果接收 scriptresource.axd 请求的应用程序池的 machineKey 与提供原始页面的应用程序池的 machineKey 不同,则可能会发生这种情况。如果您正在使用 Web Farm,则最有可能发生这种情况。如果应用程序池重新启动,也可能在单个服务器上发生,因为将生成新的 machineKey。解决方案是在您的 web.config 中放置一个固定的 machineKey。

0

我注意到Firefox 3.1 Beta会导致无效的视图状态错误。当出现这些错误时,您可能需要查看日志以了解使用的浏览器。


嗨Matt,是的,我已经审查了日志。它发生在IE8、IE7和FF3上,因此很难相信这是一个特定于浏览器的问题。我仍在挖掘 :) 谢谢! - CH81

0

视图状态有多大?一些代理服务器会截断过大的视图状态。

由于默认情况下视图状态已经启用,因此很容易滥用视图状态。如果您确实有一个庞大的视图状态,那么您可能希望考虑在不需要视图状态的控件上禁用视图状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接