是否有任何方法可以在不丢失会话状态的情况下修改ASP.NET应用程序中的App_Code

本文关键字:ASP 修改 情况下 NET Code App 应用程序 会话状态 方法 任何 是否 | 更新日期: 2023-09-27 17:56:51

我们有一个经常更新的ASP Web Forms网站。

但是,每当我们修改存储在App_Code文件夹中的任何类时,都会导致应用程序池回收并丢失所有会话状态,从而导致用户注销。

这意味着,每当我们需要更改应用程序代码时,都需要在凌晨2点左右,以最大限度地减少对用户的影响。

现在,由于我重视睡眠,我想知道这种行为是否有解决办法?

我已尝试将应用程序切换为使用会话状态的StateServer模式。

只要被更改的类当前没有使用,这似乎就可以工作。但是,如果该类正在使用,则会导致丢失每个bodies会话。

在这种情况下,对于大量使用的网站,最佳实践是什么?

每次我们需要修复课堂上的一个错误时,我都会被罚到深夜吗?

提前感谢您的回复。。。

是否有任何方法可以在不丢失会话状态的情况下修改ASP.NET应用程序中的App_Code

除了mode="StateServer"之外,您还需要sessionState设置cookieless="false"。

此外,您需要一个固定的机器密钥,因此回收不会生成新的机器密钥而是使用相同的密钥。如果生成了新密钥,则所有以前的sessionId都无法解密,因此到sessionState的链接将丢失。

检查https://technet.microsoft.com/en-us/library/cc755177(WS-10(.aspx,了解如何配置/生成机器密钥。

这是msdn的一个例子,所以不要在生产中使用它,而是生成自己的密钥:

<machineKey 
validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F" 
decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4" 
/>

最后,如果您想在机器级别上设置相同的密钥,则需要在Web.config或Machine.config中使用类似的内容。