代码之家  ›  专栏  ›  技术社区  ›  Tim Long

ASP.NET会话状态和多个工作进程

  •  22
  • Tim Long  · 技术社区  · 15 年前

    我需要了解一些有关ASP.NET会话状态的信息,因为它适用于IIS 7和ASP.NET 3.5。

    如果应用程序配置为使用进程内会话状态,那么如果有多个工作进程,该状态是否正常?换句话说,工作进程是否共享会话状态?

    IIS 7的默认配置是使用进程内会话状态,并最多分配10个工作进程。这样看来,这种默认配置很可能会起作用。我正在与一家生产ASP.NET MVC web应用程序的公司打交道,该应用程序出现了一些问题,他们将责任归咎于服务器环境。这种说法是因为我使用了10个工作进程的默认设置,这就破坏了它们的会话状态。我需要知道这是否是一个准确的说法。我从来都不知道ASP.NET应用程序不能使用默认配置,所以我有点困惑,需要澄清一下。

    4 回复  |  直到 15 年前
        1
  •  29
  •   John Manko    6 年前

    拥有多个工作进程和使用InProc似乎不兼容。

    看见 this :

    如果通过在应用程序的Web.config文件的processModel元素中将webGarden属性设置为true来启用Web garden模式,则不要使用InProc会话状态模式。如果这样做,那么如果同一会话的不同请求由不同的工作进程提供服务,则可能会发生数据丢失。

        2
  •  9
  •   TheObjectGuy    15 年前

        3
  •  6
  •   Mike Dinescu    15 年前

    我可能错了,但据我所知,默认情况下,每个应用程序域只有一个工作进程,有多个工作线程来处理请求。在这种情况下,会话设置应该可以正常工作。

    我认为在ASP.NET中有超过1个工作进程是指 网络花园模式 您必须专门启用它,如果启用,则需要进程外状态管理。见 comment box on this page 进程内模式标题 .

        4
  •  3
  •   Robin Sun    6 年前

    我遇到了会话丢失的问题,最后努力找到了根本原因。

    根本原因在于工作进程设置和会话状态之间。这里我们有5个工作进程,这意味着当网站负载较高时,它将有5个独立的进程运行。当会话存储在进程中时,IIS无法保证客户端用户将使用相同的工作进程。 例如,用户客户端第一次访问web时使用进程A,第二次访问web时可能使用进程B。进程B中没有存储会话,因此他的会话丢失。

    为什么网站负载低时还可以?因为当负载较低时,IIS将只设置一个工作进程。因此,不会发生会话丢失问题。这解释了为什么当我部署一个新版本并在晚上测试它时它是正常的,但是错误在明天早上再次发生。因为网站负载在晚上很低。

    请注意在进程中使用会话状态,当您的网站负载较高且考虑到多个工作进程时,会话状态是不稳定的。尝试类似状态服务器会话状态的操作。