我们有一个ASP Web-Forms网站,我们经常更新。
但是,每当我们修改存储在App_Code文件夹中的任何类时,这都会导致应用程序池回收并丢失所有会话状态,导致我们的用户被注销。
这意味着每当我们需要对应用代码进行更改时,它需要在凌晨2点左右,以最大限度地减少用户影响。
现在,因为我重视我的睡眠,我想知道这种行为是否有任何解决方法?
我已尝试将应用程序切换为使用StateServer模式进行会话状态。
只要当前没有使用正在更改的类,这似乎就可以工作。 但是,如果该类正在使用,则会导致每个机构会话丢失。
在这种情况下,对于使用频繁的网站,最佳做法是什么?
每次我们需要修理班级中的错误时,我是否会被熬夜?
提前感谢您的回复...
答案 0 :(得分:1)
您需要sessionState设置cookieless =" false"除了mode =" StateServer"。
此外,您需要一个固定的机器密钥,因此回收站不会生成新的机器密钥,但使用相同的密钥。如果生成了新密钥,则所有先前的sessionId都不能被解密,因此到sessionState的链接将丢失。
检查https://technet.microsoft.com/en-us/library/cc755177(WS.10).aspx有关如何配置/生成机器密钥的信息。
这是msdn的一个例子,所以不要在生产中使用它,但要生成自己的密钥:
<machineKey
validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F"
decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4"
/>
如果你想在机器级别设置相同的密钥,最后你需要在Web.config或Machine.config中使用这样的东西。