27

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

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

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

4

4 回答 4

29

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

看到这个

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

于 2010-01-27T14:42:07.383 回答
9

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

于 2010-01-27T14:42:44.547 回答
6

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

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

我认为在 ASP.NET 中拥有超过 1 个工作进程是指您必须专门启用的网络花园模式,如果您这样做,那么您需要退出进程状态管理。请参阅此页面上“进程内模式”标题下的注释框

于 2010-01-27T14:38:22.827 回答
3

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

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

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

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

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

于 2018-09-26T07:52:21.417 回答