fra*_*lic 17 asp.net appdomain application-pool content-management-system
更新 - 复制问题的过程:
1)在c:\ projects\restart-demo创建一个网站项目
2)添加默认的web.config和一个虚拟的aspx页面test.aspx
3)映射IIS以指向根文件夹c:\ projects\restart-demo
4)使用perfmon,运行状况监视,global.asax Application_End等跟踪监视应用程序重启.
5)浏览器http://localhost/test.aspx中的请求页面
申请开始
6)创建新文件夹c:\ projects\restart-demo\asdf
申请结束
7)浏览器http://localhost/test.aspx中的请求页面
申请开始
8)将文件夹c:\ projects\restart-demo\asdf重命名 为 c:\ projects\restart-demo\asdf1
申请结束
结束更新
我们使用后端CMS在ASP.NET站点中生成文件和文件夹.
用户可以创建/修改/删除文件并将其推送到Web场.
我们注意到的一个问题:
当用户创建,重命名或删除文件夹时,会导致App Domain重新启动.结果,会话,缓存等都丢失了.
请注意,它不需要是/ bin或/ App_Code之类的特殊文件夹.
有什么方法可以防止这种行为吗?
它实际上阻碍了性能,原因有两个:
fra*_*lic 15
当在Global.asax中添加到Application_Start()时,此代码似乎可以解决此问题:
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[] { });
Run Code Online (Sandbox Code Playgroud)
通过这些更改,我可以创建/修改/删除文件夹,而不会导致应用程序重新启动.
不清楚这是否是最佳解决方案 - 不知道是否会因调用StopMonitoring而产生不必要的副作用.
| 归档时间: |
|
| 查看次数: |
7854 次 |
| 最近记录: |