我最好能告诉员工流程何时回收:
a)新的一个在旧的关闭之前旋转b)旧的一个关闭所有活动请求它的服务完成
以上是准确的吗?
如果是这样,一旦Application_End()从global.ascx文件触发,我就会在SQL中存储数据.当Application_Start()触发时,我将这些数据拉回来.
问题是基于我的测试,新的工作进程在我的旧工作进程有机会完成其Application_End()之前触发Application_Start().
处理这种情况的最佳做法是什么?
提前喝彩
编辑:我刚刚注意到IIS 7上的一个功能'禁用重叠回收' - 我猜这是最好的路线
您对重叠回收的描述是准确的,是(1); 并且有一个禁用它的设置,但它旨在防止您将重新引入的HTTP错误.应用程序池回收是托管应用程序的常见情况(源自(其中包括阻止在同一内存空间中卸载程序集的CLR限制),您必须为其设计).
您的技术很难在Web场或Web园场景中进行管理.
我认为更好的设计是依靠进程外存储来存储数据(使用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