我帮助开发使用ASP.NET WebForms的相对较高流量的Web应用程序。虽然我们对viewstate的使用相对较小,但我们目前确实需要它。
将更改部署到主母版页时,我们经常会导致当前连接的用户在下次发出POST请求时收到错误。原因是POST请求中存在的视图状态树不再与服务器期望发布的树匹配。由于我们是一个Web应用程序,因此我们的许多页面都会进行POST。
完整错误当然是:
无法加载视图状态。正在加载视图状态的控制树必须与在上一个请求期间用于保存视图状态的控制树匹配。例如,在动态添加控件时,回发期间添加的控件必须与初始请求期间添加的控件的类型和位置相匹配。
自然,这对我们的用户来说非常令人沮丧。目前,我们试图:
我已经考虑过使用负载均衡器亲和力来尝试强制新用户登录新部署的版本,同时保持当前登录用户的旧版本 - 但这看起来非常复杂并且在生产中维护多个代码库不是'我真的想去哪里。
我很欣赏这项技术在这里并不是我们的朋友,但只是想知道是否有人使用任何技巧或技巧来缓解这个问题。
答案 0 :(得分:1)
我为类似的东西做了什么:我关闭了Viewstate,并在母版页中创建了一个隐藏字段,用于加密guid和日期和时间。我使用这个guid和日期和时间来引用共享缓存中的一些值。
数据小而短暂,不需要长时间保存。根据数量以及保存缓存数据的时间长短,还可以看到人们“坚持”页面的时间。
有许多开源共享缓存解决方案专门针对此类角色进行了调整。