5

尽我所能判断工作进程何时回收:

a) 一个新的在旧的关闭之前启动 b) 一旦所有的活动请求它的服务完成,旧的就会关闭

以上准确吗?

如果是这样,一旦 Application_End() 从 global.ascx 文件中触发,我就会将数据存储在 SQL 中。当 Application_Start() 触发时,我将这些数据拉回。

问题基于我的测试,新的工作进程在我的旧工作进程有机会完成其 Application_End() 之前触发 Application_Start()。

处理这种情况的最佳做法是什么?

提前欢呼

编辑:我刚刚注意到 IIS 7 '禁用重叠回收'的一个功能 - 我猜这是最好的路线

4

1 回答 1

5

您对重叠回收的描述是准确的,是的(1);并且有一个禁用它的设置,但它旨在防止您将重新引入的 HTTP 错误。应用程序池回收是您必须设计的托管应用程序的正常现象(除其他外,源于阻止在同一内存空间中卸载程序集的 CLR 限制)。

在网络农场网络花园场景中,您的技术将难以管理。

我认为更好的设计是依赖进程外的数据存储(使用分布式缓存产品,如 ScaleOut、App Fabric 等),以便所有应用程序池对缓存数据具有相同的视图。

(1) - http://mvolo.com/blogs/serverside/archive/2008/02/25/Starting_2C00_-stopping-and-recycling-IIS-7.0-Web-sites-and-application-pools.aspx

于 2010-10-29T00:25:59.210 回答