Asp.net无效的viewstate - 也许IE8 4k掉线了?

时间:2010-01-25 15:18:24

标签: c# .net asp.net viewstate

我使用System.Web.HttpException在我的网站上每天收到100多个错误:无效的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. 使用//
  2. 打包所有内联javascript
  3. 将enableViewStateMac设置为false
  4. 将maxPageStateFieldLength设置为5000个字节。
  5. 使用在web.config中定义MachineKey http://www.developmentnow.com/articles/machinekey_generator.aspx
  6. 我无法弄清楚导致错误的原因或哪个页面生成错误。 请帮忙! 谢谢!

3 个答案:

答案 0 :(得分:0)

用户是否有可能在返回应用程序之前将应用程序打开很长时间?您是否从视图状态中提取任何信息?

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

答案 1 :(得分:0)

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

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

此外,该网站是sesssion / web farm吗?两台服务器上的机器密钥相同是很重要的。 Jeff Atwood也写了一篇关于此的文章:http://www.codinghorror.com/blog/archives/000132.html

答案 2 :(得分:0)

  1. 调整应用程序池上的设置,以便在高峰期不太可能进行回收。
  2. 使用machine.config中的特定密钥来防止在每个进程启动时生成自动密钥
  3. 仅发布到同一个ASPX页面
  4. 关闭防火墙和防病毒软件
  5. 在这里找到了:http://support.microsoft.com/kb/555353