1. “File Change Notifications(FCNs)”
用来监视Web站点目录下的文件结构或内容“是否被大量改变”。如果站点被改变,则自动重启站点。这个特性主要考虑到,ASP.NET会缓存很多资源,而如果没有监控目录的变动的话,那么有些已删除的资源就有可能仍然被使用着,造成其它不必要的资源泄露。
可能出现的问题: 删除或重命名站点下的任意目录或XML文件会导致丢失Session
ASP.NET 2.0 SP2,提供禁用FCNs功能
三种途径解决:
a. 修改注册表
HKLM\Software\Microsoft\ASP.NET下添加一个名为:FCNMode的DWORD值
值为1:应用程序将禁用FCNs。
值为2:应用程序将创建一个对象监视主目录,应用程序用这个对象监视每个子目录。
最后,重启IIS。
b. 修改代码
在Global.asax(或其.cs文件)增加代码如下,就可以关掉FCNs
using System.Reflection;
PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });
c. 良好的编程习惯
把经常修改的目录移到外面去,并做一个页面用于下载该文件夹下的文件,可以提高安全性。
例如管理信息系统的“用户目录”等。这个方法的优点是,可以避免不必要的资源泄露。