繁体   English   中英

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

[英]ASP.NET session state and multiple worker processes

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

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

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

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

看到这个

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

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

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

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

我认为在ASP.NET中有多个工作进程被称为web园模式 ,你必须专门启用它,如果你这样做,那么你需要进行进程状态管理。 请参阅此页面上注释框,处于进程内模式标题下

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

最近我收到了几个关于会话丢失的bug reprot。 如果网站负载很低,一切都OK。 如果网站负载很高,则会发生会话丢失问题。 这很奇怪。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM