gpt4 book ai didi

创建、重命名或删除文件夹时 ASP.NET 重新启动

转载 作者:行者123 更新时间:2023-12-03 01:45:48 26 4
gpt4 key购买 nike

更新——复制问题的过程:

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 站点中生成文件和文件夹。

用户可以创建/修改/删除文件并将这些文件推送到网络场。

我们注意到的一个问题:

When the user creates, renames or deletes a folder, it causes the App Domain to restart. As a consequence, session, cache, etc. are all lost.

请注意,它也不需要是像/bin 或/App_Code 这样的特殊文件夹。

有什么办法可以阻止这种行为吗?

这确实会影响性能,原因有两个:

  • 应用域重新启动时会转储缓存
  • 重启后需要重新构建应用域

最佳答案

将此代码添加到 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[] { });

http://dotnetslackers.com/Community/blogs/haissam/archive/2008/11/12/disable-session-expiration-when-using-directory-delete.aspx

通过这些更改,我可以创建/修改/删除文件夹,而不会导致应用程序重新启动。

不清楚这是否是最佳解决方案 - 不知道调用 StopMonitoring 是否会产生不需要的副作用。

关于创建、重命名或删除文件夹时 ASP.NET 重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com