【问题标题】:InProc session usage in server farms服务器场中的 InProc 会话使用情况
【发布时间】:2011-02-01 07:17:49
【问题描述】:

我正在阅读 ASP.NET 4 Unleashed,我来到了这句话。 “当 Session 状态存储在进程内时,它会存储在特定的 Web 服务器上。换句话说,您不能将进程内 Session 状态用于网络场。”

哎呀。我正在构建一个使用并依赖于在会话中存储字典的 Web 应用程序。现在我知道在使用会话时字典的序列化存在一些问题,但是对于 InProc 会话,没有序列化,所以我想我会没事的。但现在我想知道:当我去托管我的应用程序时,我会不会有任何令人讨厌的惊喜?

谢谢。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    首先,如果您的应用程序在单个服务器上运行(并且可能在共享主机上),则进程内会话是可以的,并且可能是唯一的方法。

    但是,如果您有多个服务器(网络农场),或者在同一台服务器上为您的网站(网络花园)提供服务的服务器上有多个进程,则进程内将无法工作除非您使用粘性会话:您的负载均衡器需要配置为在会话启动后向同一服务器发送请求。

    不用担心字典序列化,会话处理必须能够对其进行排序,无论是状态服务器还是 SQL Server。

    然而,一般来说,任何对进程内会话或限制在进程边界内的状态的依赖都被认为是糟糕的设计,我们强烈建议不要这样做。

    【讨论】:

    • 原因主要是可扩展性,如果您的需求发生变化并且您必须获得多台服务器,那么您可能会遇到麻烦并最终可能会重新设计。此外,设计无状态 Web 应用程序通常会产生更好的代码。实现statelessness一般不会太难,如果有这样的话:)
    • 我一直听说它的设计很糟糕,但我不明白为什么。这是我的计划:当用户提取某个日期的报告时,我将此报告存储在会话中,以便后续请求从会话中检索数据,而不是调用数据库。这些报告不会更改,因为它们是历史报告。为什么这被认为是糟糕的设计?
    • 看看这里:stackoverflow.com/questions/3902506/…这是我问同样的问题
    • when a user pulls a report for a certain date, I store this report in the session 这是输出缓存的工作。不要为此使用会话,请在此处查看我的其他回复:stackoverflow.com/questions/4845354/…
    • 其实这是你的问题我才意识到!
    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2011-02-12
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多