• 删除或重命名站点下的任意目录导致站点重启(Session丢失)及解决办法


     

    也许你知道,修改站点的某些特定文件和目录会导致整个站点重启或者重新编译。也许你不注意,你不会知道删除或重命名站点下的任意目录,会导致整个站点重启(添加目录并不会)。这个问题其实是很多Session丢失的根源,比如《关于ASP.NET 2.0的目录结构变化导致Session丢失的问题》,同样你还可以找到很多这样的例子。

    这个其实是ASP.NET 2.0的一个“精心”设计,因为在很多情况下。ASP.NET会缓存很多资源,而如果没有监控目录的变动的话,那么有些已删除的资源就有可能仍然被使用着,造成其它不必要的资源泄露。通过这篇文章我们可以找到可能导致站点重启的一些条件,其中的第一条就是删除或重命名目录会导致站点重启。

    这个问题早在ASP.NET 2.0刚发布的时候就被发现,并且已经有了专门的讨论《Deleting ASP.NET 2.0 Application Sub-Directories Shuts Down the AppDomain》,在文中也提了一种解决方案,但是做法太过复杂。最理想的方案是,有相关的补丁来解决这个问题,幸运的是,我们可以通过这里找到这个补丁,并且介绍如何配置来解决这个问题。

    解决方案是:监控目录删除或重命名的机制叫:File Change Notifications (FCNs),这个补丁就是用来设置FCNS禁用或启用的开关,我们只要把FNCS禁用就可以避免这个问题。

    做法:现在的ASP.NET 2.0已经到了SP2,我们不需要单独去安装这个补丁。我们只需要在注册表在做一步操作即可解决这个问题。在HKLM\Software\Microsoft\ASP.NET 添加一个名为:FCNMode 的DWORD值,默认它应该是不存在的,它的值含义为:

    Does not exist
    This is the default behavior. For each subdirectory, the application will create an object that will monitor the subdirectory.

    0 or greater than 2
    This is the default behavior. For each subdirectory, the application will create an object that will monitor the subdirectory.

    1
    The application will disable File Change Notifications (FCNs).

    2
    The application will create one object to monitor the main directory. The application will use this object to monitor each subdirectory.

    我们将它的值设为1即可禁用FCNS。更为详细的可以参考:http://support.microsoft.com/kb/911272

    退出注册表,重启IIS,问题即可解决。

  • 相关阅读:
    git各种操作:基本操作 and 多人协作 and 冲突解决
    mini-ndn0.5.0 安装教程 (避免踩坑)
    ubuntu18.04 更换镜像源
    自定义日志轮转
    linux常用命令
    Thinkphp6 + uniapp框架,接口访问跨域问题
    机器学习-主成分分析PCA与奇异值分解SVD
    机器学习-数据预处理&特征工程
    机器学习-梯度提升树(xgboost)
    github打不开怎么办
  • 原文地址:https://www.cnblogs.com/Memory/p/1681795.html
Copyright © 2020-2023  润新知