无效的回发或回调参数

时间:2013-02-03 21:07:44

标签: asp.net windows iis

这是错误

  

无效的回发或回调参数。使用配置或<%@ Page EnableEventValidation =" true"启用事件验证。 %GT;在一个页面中。出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。

我也经常这样做

  

此页面的状态信息无效,可能已损坏。

我已经阅读了大约20个其他"无效的回发或回调参数"问题&答案,我不认为我属于任何常见的类别:

  • 动态客户端创建或更改的控件,ASP.NET不了解
  • 用户提交代码或代码位,例如"<"和">"字符
  • 在每个Page_Load事件中绑定数据,而不明智地使用if(!IsPostBack)
  • 错误的AJAX CascadingDropDown扩展程序
  • 俄罗斯人试图破解你的网站(!)
  • 拨号用户的间歇性问题(!)
  • ASP.NET版本之间不匹配,例如同时使用同时使用ASP.NET 1.1和2.0的服务器场

我认为我的问题与此列表中的最后一个问题最为相似。

我在表单回发时间歇地(但经常)在我的2个Microsoft Azure Web服务器负载平衡测试环境中收到错误。

我注意到当其中一个服务器生成的页面被发回给另一个页面时会发生问题。当我拿走负载平衡(只打一个服务器)时,问题就消失了。

我在一台网络服务器上使用Win Server 2008 R2(IIS7.5)而在另一台网络服务器上使用Win Server 2012(IIS8)(我对2008年很熟悉,并且对2012年保持警惕但想要学习,所以我如果你想知道,我选择运行其中一个来对冲我的赌注。

2008机器运行ASP.NET版本" 4.0.30319。 272 "并且2012年运行" 4.0.30319。 18010 ",但显然不同版本的IIS。

但是他们都在运行ASP.NET 4.0。 .NET应该使底层操作系统透明,对吗?因此,我不相信这会导致问题。

重新构建一个服务器以使它们相同将是一件非常繁琐的工作,并且如果ASP.NET的微小差异不是导致问题的原因,我宁愿避免使用它!

因此,有两个服务器赢得并不接受彼此的任何其他原因吗?回发表格?仅供参考,我已经在两台服务器上的web.config中添加了一个条目来修复"验证视图状态MAC失败"我得到的错误。

或者我是否可以进行任何配置更改以使服务器更兼容?

谢谢!

3 个答案:

答案 0 :(得分:3)

所以我花了半天时间重建我的网络“农场”并制作两台服务器2008R2,问题就消失了!

我的(暂定)结论是,在Server 2008R2与2012上的.NET 4.0.30319 ...版本之间的视图状态处理之间的差异(包括完全不同的__EVENTVALIDATION格式)是导致问题的原因。

我无法确定这一点,因为我设置2012服务器的方式可能与2008R2服务器不同。但是,在构建2012服务器的时候,我非常严格地遵循了我编写的2008R2构建文档,因此,以及我花费时间修改构建以使其工作的2天,这让我更加相信我没有想念一些明显的东西。

故事的道德(大约80%的信心):即使.NET版本相同,也不要在ASP.NET部署中混合使用服务器版本。

答案 1 :(得分:0)

我有同样的问题农场系统。我测试了几个解决方案,结果是:

  • 在一个系统上生成machineKey,然后复制到另一个系统。 (我在几个论坛中找到了这个解决方案,但它本身并不起作用)
  • 使用相同类型的兼容性。对我来说这是“Framework45”。 (从此配置开始工作)。

示例:

<system.web>
...
<machineKey compatibilityMode="Framework45" decryptionKey="808A25F38661B8799CFD5B6FC5CF73D2988F5786CE46075D" validationKey="B75D59843CA111DF8596FCF865D9C0459B63B6ED474D4B23FD63A5F3A5AB18560A0D2A162191EC3354650CB37B174DDE187B29D424FC5CF60EFDA567BA64D3A3" />
...
</system.web>

答案 2 :(得分:-5)

尝试在页面指令中添加以下内容 -

<%@ Page EnableEventValidation="false" %>
相关问题