Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当.NET 4.5 Framework仅安装在负载平衡器后面的一台服务器上时,ASP.NET EventValidation失败_Asp.net_Cryptography_.net 4.5_Web Farm_Eventvalidation - Fatal编程技术网

当.NET 4.5 Framework仅安装在负载平衡器后面的一台服务器上时,ASP.NET EventValidation失败

当.NET 4.5 Framework仅安装在负载平衡器后面的一台服务器上时,ASP.NET EventValidation失败,asp.net,cryptography,.net-4.5,web-farm,eventvalidation,Asp.net,Cryptography,.net 4.5,Web Farm,Eventvalidation,我们在一台web服务器上安装了.NET4.5框架。我们的应用程序针对.net 4.0,在负载平衡器后面运行多台服务器 安装完成后,对于一些POST请求,我们会收到以下错误消息 错误\u name=System.ArgumentException 错误消息=回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValida

我们在一台web服务器上安装了.NET4.5框架。我们的应用程序针对.net 4.0,在负载平衡器后面运行多台服务器

安装完成后,对于一些POST请求,我们会收到以下错误消息

错误\u name=System.ArgumentException 错误消息=回发或回调参数无效。在配置或页面中使用启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。 error\u details=来源:System.Web

当从安装了.net 4.5的服务器请求时,请求正文中的_EVENTVALIDATION值不同。MSDN提到.net 4.5中的加密更改使用opt-in配置,因此默认情况下它应该是向后兼容的


在不禁用事件验证的情况下,是否进行了配置更改?我需要对安装了.net 4.5的计算机执行与仅安装了.net 4.0的计算机相同的操作?有趣的问题是,我会尝试将某些行为冻结到特定版本的框架(在web.config中)




我会检查机器密钥配置,并确保在所有服务器上都相同。及

此外,您还可以检查是否有任何客户端脚本

如果编写的客户端脚本在运行时更改客户端中的控件,则可能必须使用RegisterForEventValidation方法以避免错误的事件验证错误


我遇到了同样的问题,因为我们目前正在将服务器场从2003年(.NET 4.0)迁移到Windows 2012(.NET 4.5)。查看ClientScriptManager,事件验证代码发生了很大的变化

修复方法是添加appSetting以使用遗留事件验证兼容性,如下所述



现在,无论是由.NET 4.0还是4.5生成,我的页面中为事件验证生成的值都是相同的

这是单独在此服务器上以隔离方式运行时的值吗?负载平衡器是否启用了持久性?有没有可能此服务器正在从没有4.5版本的其他web服务器返回帖子?它以隔离方式工作正常。我认为,当初始请求来自未安装.net 4.5的服务器,并且post将其发送到安装了.net 4.5的服务器时,会出现问题。请检查以确保它没有更改您的机器密钥等,但最好的办法是验证没有其他问题,并将其推广到其他服务器。同时,在负载平衡器中实现持久性,以消除跨服务器调用,直到所有调用都可以修补为止。混合模式似乎永远不会正常工作。ASP.NET以前不支持混合部署。Brian的建议是最好的:在负载平衡器中进行亲缘化,这将给您时间来完成该卷展。当服务器全部升级后,问题应该会消失。(事件验证与ViewState相关,ViewState格式在4.0和4.5之间稍微调整,导致了您看到的错误。)@chrisk,您能告诉我们Brian的解决方案是否适合您吗?谢谢我们现在没有一个服务器场来测试这一点,但这听起来确实是一个很好的解决方案。我在google和msdn上进行了大量搜索后没有遇到此解决方案。请记住在迁移完成后删除此值。我们只在迁移场景中包含这些开关,我们完全打算在将来的更新中删除它们。如果您仍然依赖此开关,并且我们将其删除,则您的应用程序可能会被破坏。@Levi此开关未在上记录,仅在上记录,这很难找到(除非您已经知道如何查找)。谢谢!在将Server 2003和Server 2012迁移到同一个池中后,这让我省去了心痛。
<httpRuntime requestValidationMode="4.0" />
<compilation targetFramework="4.0">
<pages controlRenderingCompatibilityVersion="4.0"/>
<appSettings>
  <add key="aspnet:UseLegacyEventValidationCompatibility" value="true" />
</appSettings>