我帮助开发一个使用ASP.NET WebForms的相对高流量的Web应用程序。虽然我们使用的视图状态比较少,但目前我们确实需要它。
当部署主要主控页的更改时,我们经常会导致当前连接的用户在下次发出POST请求时收到错误。原因是他们的POST请求中存在的视图状态树不再与服务器期望发布的内容匹配。由于我们是一个Web应用程序,我们的许多页面都进行POST请求。
完整的错误信息当然是:
“Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.”
这对我们的用户来说自然是非常令人沮丧的。目前,我们试图:
1. 最小化对主控页的更改(至少是涉及服务器控件的更改) 2. 在低流量时段进行部署
我考虑过使用负载均衡器关联技巧,试图强制新登录用户使用新部署版本,同时使当前已登录用户保留旧版本 - 但这似乎非常复杂,并且在生产环境中维护多个代码库并不是我想要去的方向。
我知道这里技术上并不是我们的朋友,但我想知道是否有人有任何提示或技术可以减轻这个问题。
当部署主要主控页的更改时,我们经常会导致当前连接的用户在下次发出POST请求时收到错误。原因是他们的POST请求中存在的视图状态树不再与服务器期望发布的内容匹配。由于我们是一个Web应用程序,我们的许多页面都进行POST请求。
完整的错误信息当然是:
“Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.”
这对我们的用户来说自然是非常令人沮丧的。目前,我们试图:
1. 最小化对主控页的更改(至少是涉及服务器控件的更改) 2. 在低流量时段进行部署
我考虑过使用负载均衡器关联技巧,试图强制新登录用户使用新部署版本,同时使当前已登录用户保留旧版本 - 但这似乎非常复杂,并且在生产环境中维护多个代码库并不是我想要去的方向。
我知道这里技术上并不是我们的朋友,但我想知道是否有人有任何提示或技术可以减轻这个问题。