用于在部署到高流量站点时减轻视图状态控制树更改的技术

本文关键字:控制 视图状态 技术 站点 部署 高流量 流量 用于 | 更新日期: 2023-09-27 18:29:47

我帮助开发一个使用ASP.NET WebForms的流量相对较高的web应用程序。尽管我们对viewstate的使用相对较少,但我们目前确实需要它。

在部署对主主页面的更改时,我们经常会导致当前连接的用户在下次发出POST请求时收到错误。原因是POST请求中存在的视图状态树与服务器期望发布的内容不再匹配。由于我们是一个web应用程序,所以我们的许多页面都进行POST。

完全错误当然是:

未能加载视图状态。视图状态加载到的控制树必须与上次请求期间用于保存视图状态的控制树匹配。例如,当动态添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控制器的类型和位置相匹配。

当然,这对我们的用户来说是非常令人沮丧的。目前,我们尝试:

  1. 最小化对母版页的更改(至少,涉及服务器控件的更改)
  2. 在低流量时段部署

我曾想过利用负载均衡器的亲和力来尝试强制新登录的用户使用新部署的版本,同时将当前登录的用户保持在旧版本上——但这似乎非常复杂,在生产中维护多个代码库并不是我真正想去的地方。

我很感激这项技术并不是我们真正的朋友,但我只是想知道是否有人有任何技巧或技术可以用来缓解这个问题。

用于在部署到高流量站点时减轻视图状态控制树更改的技术

我为类似的事情做了什么:我关闭了Viewstate,并在母版页中创建了一个隐藏字段,该字段加密了guid以及日期和时间。我使用这个guid以及日期和时间来引用共享缓存中的一些值。

这些数据很小,很短暂,不需要保存很长时间。根据容量和缓存数据的保存时间,还可以查看人们"坚持"页面的时间。

有很多开源共享缓存解决方案专门针对这类角色进行了调整。