我已经创建了一个基于 ASP.NET 的依赖方应用程序,并且该应用程序部署在启用了负载平衡并使用粘性会话的场服务器上。
当请求来自单个服务器时,它工作正常,但在回发期间,如果请求服务器在该时间内发生变化,则会引发异常“密钥在指定状态下无效”。
我尝试在两台服务器上设置相同的机器密钥,但仍然面临同样的问题。
我在网上找到了替代解决方案是设置 enableViewStateMac="false"。
我可以使用这个吗?它有什么缺点?
答案1
为了回答你的问题,根据微软:
在生产网站中,绝不能将此属性设置为 false。
(当然,默认值也是错误的......)这表明你要非常小心地做这件事。
您能否提供一个您在网上找到的建议您关闭此功能的资源链接?
接下来,根据MSDN 博客:
问题是,如果执行 POST 返回并转到不同的服务器,您将收到一条小错误消息,提示“视图状态损坏”。
要解决此问题,您可以在元素中将 enableViewStateMac 设置为 false,或者在所有服务器(在场中)的元素中为 validationKey 属性指定一个通用值。
这表明,除非错误消息发生了变化(很有可能),否则这不是您遇到的问题。
看看这个被接受的答案 -https://stackoverflow.com/questions/686873/allowing-session-in-a-web-farm-is-stateserver-good-enough/687162#687162- 在 Stack Overflow 上查看以确保您已正确设置。
MSDN 上也有一篇文章ASP.NET 会话状态概述讨论设置会话状态。
目前,我认为这是一个配置问题。更改 machine.config 应该会重新启动应用程序池,所以这可能不是问题所在。