如何在不丢失会话的情况下更新 asp 网络表单或 mvc 应用程序

本文关键字:网络 asp 更新 表单 应用程序 mvc 情况下 会话 | 更新日期: 2023-09-27 18:31:21

这是我的场景。我在 Windows Server 2012 上的 iis 8 上发布我的网络表单或 mvc 应用程序。然后我的客户请求其他东西,我必须更新代码隐藏。

例如,表单上的新输入或数据库上的新列。我正在为会员资格或购物车流程使用会话变量。

当我在服务器中复制新的 bin 文件时(当我发布我的应用程序时),会话会死亡。如何解决此更新问题?我该怎么做才能保持会话的活跃状态?因为访客正在丢失他们的购物车。

感谢您的帮助。

如何在不丢失会话的情况下更新 asp 网络表单或 mvc 应用程序

许多事情会导致 IIS 丢弃会话:

  • 许多文件会为您更新和 ASP.NET 主动重新编译。
  • 会话自然超时
  • 更新 web.config 这将导致它回收
  • 网站应用池因其他原因回收

听起来你正在与第一个发生冲突,没有办法阻止这种行为。

听起来您正在使用"进行中"会话,这是默认设置,这就是您丢失篮子等的原因。

从 MSDN:

InProc 模式,将会话状态存储在 Web 服务器上的内存中。这是默认值。

其他选项包括:

状态

服务器模式,将会话状态存储在称为 ASP.NET 状态服务的单独进程中。这可确保会话状态为 如果重新启动 Web 应用程序并创建会话,则保留 状态可用于 Web 场中的多个 Web 服务器。

SQLServer 模式将会话状态存储在 SQL Server 数据库中。这可确保在 Web 应用程序 重新启动,并使会话状态可用于多个 Web Web 场中的服务器。

自定义

模式,可用于指定自定义存储提供程序。

将会话切换到其中任何一个其他会话都可以进行更新,但迁移不是即时的。

当我在服务器中复制新的 bin 文件时(当我发布我的应用程序时),该 会话死亡。如何解决此更新问题?我该怎么办 保持会话活动状态?

默认情况下,会话状态模式为 InProc。您希望使用 StateServer 或 SQLServer。

在Windows Azure中,我们使用自定义模式并存储在Redis缓存中。

因为访客正在丢失他们的购物车。

即便如此,会话状态也不可靠。

我通常在数据库中创建一个购物车表。然后将购物车的 ID 保存在客户端浏览器的 cookie 中。

此外,如果用户登录,我还将UserId保存在同一个表中,因此用户仍然可以在任何计算机上查看他/她的购物车。

例如,amazon.com 也有类似的方法。