【问题标题】:Asp.net Invalid viewstate - Maybe IE8 4k dropped bug?Asp.net 无效的视图状态 - 也许 IE8 4k 丢失了错误?
【发布时间】:2010-01-25 15:18:23
【问题描述】:

我的网站每天出现 100 多个错误,出现 System.Web.HttpException: Invalid viewstate。在 System.Web.UI.Page.DecryptStringWithIV

该网站是在 iis6 上运行的 asp.net 3.5 ,而不是在 web-garden/web-farm 单一服务器中运行。

网站使用的是 xhtml doctype。

viewstate 大小从 2kb 到 20kb 不等

这里有一些示例错误。

Machine: ML Framework Version: 2.0.50727.3603 Assembly Version: 6.5.3664.33889     
Source: http://www.domain.com/WebResource.axd?d=z5VmXXoSLLpQHoPictureAlert     
Exception: System.Web.HttpException: Invalid viewstate. at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType) at System.Web.Handlers.AssemblyResourceLoader.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)     

Machine: MLFramework Version: 2.0.50727.3603 Assembly Version: 6.5.3664.33889     
Source: http://www.mydomain.com/ScriptResource.axd?d=SE0Ej7OlEAx91j2Cjv_6KkRPplqT-5wB4M7CZPdGdGn3LahLwqlRPApUcdxBsbFXYHZ91Q76FHAHWgHs8SmOC4zemr7    
siym0QY0rF3XtJTu%3C/a%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ca%20id=     
Exception: 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)    

我已经尝试过的解决方案:

  1. 用 // 包装所有内联 javascript
  2. 将 enableViewStateMac 设置为 false
  3. 将 maxPageStateFieldLength 设置为 5000 字节。
  4. 使用在 web.config 中定义 MachineKey http://www.developmentnow.com/articles/machinekey_generator.aspx

我无法弄清楚导致错误的原因或生成错误的页面。 请帮忙! 谢谢!

【问题讨论】:

    标签: c# .net asp.net viewstate


    【解决方案1】:

    用户是否有可能让应用长时间处于打开状态后才再次使用?您是否从视图状态中提取任何信息?

    Session 可能是在回发中保持值的更好方法。

    【讨论】:

    • 是的,这是可能的,我知道有些用户打开网站并长时间打开浏览器。但这将如何导致这些错误?
    • 当您生成错误时(您在下面的评论中提到过),它是随机发生的还是您必须让网站长时间打开?除了随机机会,是否绝对没有办法重现错误?
    • 不,当我生成错误时,它不是当网站长时间打开时。我只需点击页面上的几个链接/按钮。有时我得到一个错误(我没有看到它刚刚登录到 log4net 文件的错误),有时什么也没有。 (即使一遍又一遍地执行相同的步骤也不会重现错误。)
    • 你在程序中的任何地方都弄乱了视图状态吗?
    • 是的,但没什么大不了的,我有几个地方我在视图状态中存储了一个 int/string 变量。
    【解决方案2】:

    根据我的经验,这些错误是由安全公司产生的,或者在少数情况下是由试图将无效数据发布到页面的黑客产生的。如果您似乎无法通过单击页面的正常用法自行找到错误的根源,则尤其如此。

    我们在 page_error 例程中处理基本页面(我们用来继承所有页面)上的错误。然后,我们检查错误消息以及其他错误消息,例如:潜在危险的查询字符串值、无效的回发或回调参数等。如果存在其中一个错误,我们将其存储在审计中,并有一个单独处理这些错误的进程.

    此外,该站点是否位于会话/网络农场中?重要的是,两台服务器上的机器密钥相同。 Jeff Atwood 也写了一篇关于此的文章:http://www.codinghorror.com/blog/archives/000132.html

    【讨论】:

    • 我在浏览网站时会产生错误,但我似乎无法将其链接到页面或组件,它只是随机发生。另一方面,我只是不能在我的 DEV 机器上生成错误
    【解决方案3】:
    1. 调整应用程序池的设置,以便在高峰期不太可能发生回收。
    2. 使用 machine.config 中的特定密钥来防止在每个进程启动时自动生成密钥
    3. 仅发布到同一个 ASPX 页面
    4. 关闭防火墙和防病毒软件

    在这里找到:http://support.microsoft.com/kb/555353

    【讨论】:

    • 我的池回收是默认的:每 1960 分钟一次。
    猜你喜欢
    • 2014-10-05
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多