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

时间:2010-01-27 14:28:11

标签: asp.net asp.net-mvc iis-7 session-state worker-process

我需要了解ASP.NET会话状态,因为它适用于IIS 7和ASP.net 3.5。

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

IIS 7的默认配置是使用进程内会话状态并分配最多10个工作进程。那么这个默认配置应该可行。我正在与一家公司打交道,该公司已经制作了一个有一些问题的ASP.NET MVC网络应用程序,他们指责服务器环境。声称是因为我使用的是10个工作进程的默认设置,即打破了会话状态。我需要知道这是否真的是一个准确的主张。我从来不知道ASP.NET应用程序不能使用默认配置,所以我有点困惑,需要明确这一点。

4 个答案:

答案 0 :(得分:25)

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

请参阅this

  

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

答案 1 :(得分:8)

不止一个工人流程是“网络花园”。进程内会话状态将无法正常工作。您需要为Web应用程序使用单个工作进程,或者使用会话状态服务器或SQL Server进行会话状态。

答案 2 :(得分:5)

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

但是如果你确实有多个工作进程(不仅仅是工作线程,实际的工作进程),那么你需要进行进程外会话状态。

我认为在ASP.NET中有多个工作进程被称为 web园模式,你必须专门启用它,如果你这样做,那么你需要进行进程状态管理。请参阅进程内模式标题下的comment box on this page

答案 3 :(得分:2)

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

最近我收到了关于会话丢失的多个错误回复。如果网站负载低,则一切正常。如果网站负载很高,则会发生会话丢失问题。这很奇怪。

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

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

请小心在Process中使用会话状态,当您的网站负载很高并且考虑使用多个工作进程时,它是不稳定的。尝试使用State Serversession状态。