是否有任何方法可以在不丢失会话状态的情况下修改ASP.NET应用程序中的App_Code
本文关键字:ASP 修改 情况下 NET Code App 应用程序 会话状态 方法 任何 是否 | 更新日期: 2023-09-27 17:56:51
我们有一个经常更新的ASP Web Forms网站。
但是,每当我们修改存储在App_Code文件夹中的任何类时,都会导致应用程序池回收并丢失所有会话状态,从而导致用户注销。
这意味着,每当我们需要更改应用程序代码时,都需要在凌晨2点左右,以最大限度地减少对用户的影响。
现在,由于我重视睡眠,我想知道这种行为是否有解决办法?
我已尝试将应用程序切换为使用会话状态的StateServer模式。
只要被更改的类当前没有使用,这似乎就可以工作。但是,如果该类正在使用,则会导致丢失每个bodies会话。
在这种情况下,对于大量使用的网站,最佳实践是什么?
每次我们需要修复课堂上的一个错误时,我都会被罚到深夜吗?
提前感谢您的回复。。。
除了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中使用类似的内容。