无效的回发或回调参数/无效的视图状态
Posted
技术标签:
【中文标题】无效的回发或回调参数/无效的视图状态【英文标题】:Invalid postback or callback argument / Invalid viewstate 【发布时间】:2013-03-01 12:13:40 【问题描述】:我们有在 IIS 7.5 上运行的 asp.net (v3.5) 网站,我们的应用程序池在 2.0 中。该站点还位于具有粘性会话的负载平衡服务器场上。 平均而言,我们每天会收到大约 200 到 300 个视图状态错误,而回发错误是每天 1,000 到 2,000 个。
回发错误最多的页面包含一个 asp 数据列表,其中绑定了许多项目。以及用于过滤和分页的下拉菜单,以及一些回发的 asp 超链接。
对于视图状态,这些页面使用 ajax 选项卡、asp 超链接、模态弹出扩展器和 asp 下拉菜单。
该网站确实获得了大量流量,并且有许多机器人(例如 Google 和 MSN)访问它。
我们尝试了以下方法:
禁用某些控件的视图状态以最小化视图状态大小 将视图状态移动到数据库中 压缩视图状态 将视图状态移动到页面底部以上都没有帮助我们解决我们的问题。
非常感谢您解决此问题的任何帮助。
已更新错误信息:
视图状态错误来源:System.Web
错误尝试/捕获:System.Web.UI.ViewStateException:无效的视图状态。客户端 IP:... 端口:*** 用户代理:Mozilla/4.0(兼容;Synapse )的ViewState:00ytitesern5vnudvqgz rneo / nncjwe2gqvm9hwsejfneaemuijx m43rkjqdgmurhezuvzjtw FCU / cbzrx0xfscog4bv07c1fi7ali / 883amvbby5owiliaihufk4fvbn1wgarkbwxmmionsf0jcgw6wlnppj3ww8nmd3 423pu91yexxuyuygxpnu9osgzvxre5wfjlhlhg4ngo1bxdgekgfilzqbxjq58w2aqc7gvdj1ytz4xshkzvjdldiecewgfokt / ot2cpecb bavgiy2f / lvfjg4h9kmuvumsgrbkc6enfnfa0eqce2fi2hj3jo1qqchwsvty8l9uaq6k8oq6ctsggrtyr3xnd 654w6nmldj W8ùvvbaez6hm5zofqxnfrzobik6qbqq5dd7qrozuiu abdvgg xaa5jjm9o5 / rroxkrx2fzzhkzjij0xc9p6jenvht 0mplciq4xnewyotosx86axuioyb0yww2phkothy2zok7j2q / xz4j29zz2drnmqj1km 3J mofii0kk0qe0 / s8mkotmhtk4k rfyfja / h7wtebpualg3hg9ydru3yn6pfimay2aasoloydvmj / xfffd tknfqeg7da7 / n2flq6hczcolanyjsxf9ofstomby4flhcyuuq / hqg7pc8qvrqy0s / seqyqkr 1ne7bktrazjwlgygpprawneml8f1kbujtbjtz7feieyzu76j1mnt agwlrhgchwjmux58cjlu2bbh7ayitfevapzt21pn92du5zcnmiajfxfou1motqkl8hqmlbjj0hxhpi5j5gg5xdxpz5xkqfdflw2wgqvfjxilhqm6mwyjs mif6r8wtdjkrsxxmapyeq61lfa8 7zntc2v3v8rup1kgm0ssp7bb zgcfy...
错误信息:视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保 |machineKey|配置指定相同的validationKey 和验证算法。 AutoGenerate 不能在集群中使用。
HttpErrorCode: 500
堆栈跟踪:在 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) 在 System.Web.UI 的 System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)。 Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) 在 System.Web.UI.HiddenFieldPageStatePersister.Load() 在 System.Web.UI.Page.LoadPageStateFromPersistenceMedium() 在 System.Web.UI.Page.LoadAllState() 在 System.Web .UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest() 在 System.Web.UI.Page System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep 处的 ASP.content_aspx.ProcessRequest(HttpContext 上下文) 处的 .ProcessRequest(HttpContext 上下文)。 Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
浏览器:Mozilla/4.0(兼容;Synapse)
回发 错误来源:System.Web错误尝试/捕获:System.ArgumentException:回发或回调参数无效。使用 |pages enableEventValidation=|true|/| 启用事件验证在配置中或 |%@ 页面 EnableEventValidation=|true| %|在一个页面中。出于安全目的,此功能验证回发或回调事件的参数是否源自 **_sQueEl_clean 最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。在 System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) 在 System.Web.UI.WebControls.TextBox.LoadPostData(String postDataKey, NameValueCollection postCollection) 在 System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
错误信息:类型异常 |System.Web.HttpUnhandledException|被扔了。
HttpErrorCode: 500
堆栈跟踪:在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.HandleError(Exception e) 在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint) , 布尔 includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest() 在 System.Web.UI.Page.ProcessRequest(HttpContext context) 在 ASP.category_aspx.ProcessRequest(HttpContext context) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System .Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
浏览器:Mozilla/5.0(iPhone;CPU iPhone OS 6_0_1,如 Mac OS X)AppleWebKit/536.26(Khtml,如 Gecko)版本/6.0 Mobile/10A523 Safari/8536.25
【问题讨论】:
很可能您的数据列表的数据源被数据绑定到与回发之前不同的东西。另一种解决方案是使用 ajax 而不是依赖回发。除此之外,我们需要更具体的信息。 @Brad 谢谢你我还能提供什么其他信息? 您能发布您收到的确切错误吗?可以帮助我们诊断问题。 @GrantClements 我已经用我们得到的错误更新了帖子 【参考方案1】:场中所有服务器上的机器密钥 (http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.71%29.aspx) 值是否相同?
【讨论】:
我们还没有探索过这个选项,但会在几天后研究。 +1 @Kaos 这是一个非常好的观点 - 我完全错过了您的 OP 中说明它在农场的第一段,并且每天有 200-300 个视图状态错误。如果这是垃圾邮件活动,我会感到震惊。我同意这比我建议的更可能是问题。对不起,如果我派你去不同的野鹅追逐。【参考方案2】:我看到了类似的问题,经过调查,我们能够得出结论,这是由垃圾邮件机器人攻击我们的网站引起的 - 即尝试在没有首先获得正确的视图状态的情况下提交值,并且视图状态正在做的正是它本来的样子旨在做(保护您的回发免受无效数据 - 恶意或其他)。
这可能也是您所看到的,我预计。如果您遇到Google 和 MSN 等许多机器人攻击它,那么几乎可以肯定您也遇到了不良机器人。
参考这些 SO 搜索结果:https://***.com/search?q=asp.net+spambot
像this one 这样的文章可能有助于减轻您对错误的担忧。
令我感到奇怪的是,错误消息让我们陷入了疯狂的追逐,试图检测复杂的内部问题,而不是仅仅明确说明“在野外” ,这种情况的最简单和最可能的原因是您被垃圾邮件攻击了”,并提供了一些建议或文章来参考建议如何确认这一点。
【讨论】:
以上是关于无效的回发或回调参数/无效的视图状态的主要内容,如果未能解决你的问题,请参考以下文章
Sys.WebForms.PageRequestManagerServerErrorException:无效的回发或回调参数