如何将会话数据从一台服务器传输到另一台服务器?

时间:2010-02-09 13:54:39

标签: asp.net

我们开发了一个仅在一台服务器上运行的Web应用程序。现在客户端需要我们的应用程序在两个服务器因此,如果其中一台服务器停止运行另一台服务器应该正常工作我们在我们的应用程序中使用会话。现在问题是如何将会话数据从一个服务器传输到另一个服务器??

7 个答案:

答案 0 :(得分:2)

您需要session server才能执行此操作。

这通常意味着将作为一个SQL服务器,但有other options

答案 1 :(得分:1)

转到SQL会话状态模型并使用SQL Server后端。这是Microsoft How-To

答案 2 :(得分:1)

ASP.NET允许您在one of three places中使用会话信息(参见下面的MSDN列表)。方法2或3可以很好地解决您的困境。

  1. InProc模式,它将会话状态存储在Web服务器的内存中。这是默认设置。

  2. StateServer模式,它将会话状态存储在名为ASP.NET状态服务的单独进程中。这可确保在重新启动Web应用程序时保留会话状态,并使会话状态可用于Web场中的多个Web服务器。

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

  4. 当然,除非您还拥有冗余状态机,否则您仍会遇到单点故障。

答案 3 :(得分:0)

答案 4 :(得分:0)

您需要做的是将会话数据保存在复制数据库中(例如,使用SQL服务器),而不是在一台计算机上本地维护。

请注意,当您使用此技术时,您将获得可靠性,但由于使用数据库的开销而导致延迟丢失。

答案 5 :(得分:0)

查看ScaleOut State Server。此小工具将在多个服务器之间共享会话状态,因此如果一个服务器发生故障,则不会丢失任何会话。

答案 6 :(得分:0)

通常有几种方法可以解决这个问题:

  • 运行StateServer,让状态服务处理您的会话数据。为您节省数据库之旅,但只留下一个故障点

  • 将状态放入SQLServer。为数据库带来一些额外的负载。但是,如果你有聚类,你可以避免单点故障

  • 负载均衡器中的粘连。负载均衡器会记住上次为您服务的服务器,并再次向您发送。如果有问题的服务器已关闭,则会话将丢失。

  • 然后有像NCache这样的分布式状态服务器产品,它允许您通过多个服务器分发状态服务。