4

正如Mauricocodeka首先所说,如果您不希望您的会话受到网站重新编译和应用程序回收的影响,请不要使用默认的InProc 会话。

导致整个网站重新编译的原因列表:

  1. 默认情况下,当对网站中的顶级文件进行任何更改时,将重新编译整个网站。顶级文件包括global.asax文件以及bin/App_Code/文件夹中的所有文件。

  2. 修改web.config

  3. 如果SectionInformation.RestartOnExternalChanges 属性为 true ,则配置包括文件更改

    <section name="MyAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges =" true " requirePermission="false" />

笔记:

参考:


说明导致网站项目(而不是 Web 应用程序项目)重新编译自身的更改和文件类型的信息在哪里?

我问的原因是因为我们不希望用户丢失他们的会话。因此,我们希望仅在凌晨时分使用可重新编译的更改来更新实时网站,但更愿意在白天进行更改以加快速度。我们确实会先升级到登台服务器并在那里观看,但最好提前提供一个明确的列表。

4

1 回答 1

7

您不仅会在重新编译网站时丢失会话,而且在回收 IIS 工作进程时也会丢失会话。从技术上讲,这可能随时发生有一些方法可以将其最小化,但我更喜欢构建能够在工作进程回收后仍然存在的应用程序),因此如果会话很重要,那么您确实需要将它们存储在进程外.

ASP.NET 带有一个内置的“状态服务器”,它只是一个存储会话状态的 Windows 服务。另一种选择是使用 SQL Server 会话状态存储。

很多人会告诉你,在 SQL Server 中存储会话状态是一个性能问题,但我不同意:由于进程回收而丢失会话比 SQL Server 的性能更令人担忧。此外,如果这是您真正需要的,ASP.NET 状态服务器会更快(如果您想在电源循环中幸存下来,您甚至可以编写一个将状态存储在 NoSQL 数据库中的自定义提供程序!)

于 2010-04-12T23:39:04.017 回答