我使用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)
我已经尝试过的解决方案:
我无法弄清楚导致错误的原因或哪个页面生成错误。 请帮忙! 谢谢!
答案 0 :(得分:0)
用户是否有可能在返回应用程序之前将应用程序打开很长时间?您是否从视图状态中提取任何信息?
会话可能是在回发中保持值的更好方法。
答案 1 :(得分:0)
根据我的经验,这些错误是由安全公司生成的,或者在较小的情况下,由试图将无效数据发布到页面的黑客生成。如果您似乎无法通过单击页面的正常用法自行找到错误来源,则尤其如此。
我们在page_error例程中处理基页(我们用来继承所有页面)的错误。然后我们检查错误消息,以及其他诸如:一个潜在危险的查询字符串值,无效的回发或回调参数等。如果存在其中一个错误,我们将其存储在审计中并有一个处理这些错误的进程
此外,该网站是sesssion / web farm吗?两台服务器上的机器密钥相同是很重要的。 Jeff Atwood也写了一篇关于此的文章:http://www.codinghorror.com/blog/archives/000132.html
答案 2 :(得分:0)