这是我的情景。 我在Windows Server 2012上的iis 8上发布了我的webforms或mvc应用程序。 然后我的客户请求别的东西,我必须更新代码隐藏。
例如,表单上的新输入或db上的新列。我正在使用会话变量进行会员或购物车流程。
当我在服务器中复制新的bin文件时(当我发布我的应用程序时),会话终止。如何解决此更新问题? 我该怎么办才能保持会话活着?因为访客正在丢失他们的购物车。
感谢您的帮助。
答案 0 :(得分:4)
许多事情会导致IIS丢弃会话:
听起来你正在与第一个发生冲突,并且没有办法阻止这种行为。
听起来你正在使用“In Process”会话,这是默认的,这就是你丢失篮子等的原因。
来自MSDN:
InProc模式,它将会话状态存储在Web服务器的内存中。这是默认值。
其他选项包括:
StateServer模式,它将会话状态存储在名为ASP.NET状态服务的单独进程中。这确保了会话状态 如果重新启动Web应用程序并保留会话,则保留 状态可用于Web场中的多个Web服务器。
SQLServer模式将会话状态存储在SQL Server数据库中。这可确保在Web应用程序中保留会话状态 重新启动并使会话状态可用于多个Web Web场中的服务器。
自定义模式,可让您指定自定义存储提供程序。
将会话切换到其他任何一个会使您能够更新,但迁移不是即时的。
答案 1 :(得分:3)
当我在服务器中复制新的bin文件时(当我发布我的应用程序时), 会话死了。如何解决此更新问题?我该怎么做 保持会话活着?
默认情况下,Session-State Mode是InProc。您想要使用StateServer或SQLServer。
在Windows Azure中,我们使用自定义模式并存储在Redis Cache中。
因为访客正在丢失购物车。
即使这样,会话状态也不可靠。
我通常在数据库中创建购物车表。然后在客户端浏览器中将 cookie 内的购物车ID保存在其中。
此外,如果用户登录,我还将UserId保存在同一个表中,这样用户仍然可以在任何计算机上查看他/她的购物车。
例如,amazon.com有类似的方法。