零停机asp.net部署和会话状态问题

零停机asp.net部署和会话状态问题,asp.net,deployment,session-state,Asp.net,Deployment,Session State,在工作中,我们有一个相当好的流程,可以实现繁忙的ASP.NET MVC网站的零停机部署。有两个服务器组,所以我们可以移动流量,我们写db SP的向后兼容,并提前推出。一般来说,它工作得很好 然而,有一个问题刚刚把我绊倒了。上一次部署包括许多代码命名空间更改 部署构建时,它中断了现有用户会话,因为处于会话状态的对象不再存在于新代码库中,例如,它们的会话包含App_Code.UserDetails,而站点现在有一个X.Y.Z.UserDetails类 我理解这个问题及其发生的原因,但我不能确定的是,

在工作中,我们有一个相当好的流程,可以实现繁忙的ASP.NET MVC网站的零停机部署。有两个服务器组,所以我们可以移动流量,我们写db SP的向后兼容,并提前推出。一般来说,它工作得很好

然而,有一个问题刚刚把我绊倒了。上一次部署包括许多代码命名空间更改

部署构建时,它中断了现有用户会话,因为处于会话状态的对象不再存在于新代码库中,例如,它们的会话包含App_Code.UserDetails,而站点现在有一个X.Y.Z.UserDetails类


我理解这个问题及其发生的原因,但我不能确定的是,除了完全关闭站点以确保站点上没有活动用户之外,是否还有其他可以做的事情。或者重新启动状态服务,这样每个人都会被启动并重新登录。各位有什么想法吗?

仔细考虑后,我得出了两种可能的解决方案:

a) 始终在停机时部署网站更新。将站点关闭足够长的时间,以使所有会话都过期。这在技术上是安全的选择,但在商业上是不可接受的

b) 模拟该问题,并查看如何在异常处理程序中解决该问题。虽然不是理想的最终用户体验,但捕获会话状态上的序列化异常并刷新用户会话可能更好。他们将不得不再次进行身份验证,但这并不像中断的会话那么糟糕

我之前做出的一个决定是,在开发过程中,很难在活的会话依赖中拾取,还有太多的事情要考虑。 我将调查(b),因为这听起来很可行