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