0

在 asp.net 中删除目录后,应用程序将重新启动,我将丢失所有会话并且缓存将被清除。所以我找到了以下解决方案;我将以下代码放在Application_Start禁用Global.asax应用程序池回收中,但有时它不起作用。为什么?

System.Reflection.PropertyInfo p = typeof(HttpRuntime).GetProperty("FileChangesMonitor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
        object o = p.GetValue(null, null);
        System.Reflection.FieldInfo f = o.GetType().GetField("_dirMonSubdirs", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.IgnoreCase);
        object monitor = f.GetValue(o);
        System.Reflection.MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        m.Invoke(monitor, new object[] { });
4

1 回答 1

1

无法阻止应用程序池回收,无论如何这样做都是错误的实现方式。

相反,您不应删除应用程序目录中的任何文件或目录。对于临时数据,您应该使用 temp 目录,对于持久数据,您应该将其存储在单独的位置。

此外,如果您关心在应用程序池回收后保留会话和缓存,则应另外将其存储在持久数据存储中并重新加载。

于 2013-06-16T05:23:54.763 回答