我正在使用 VS2012 进行开发,也与 VS2010 相同。我从事 Web 应用程序项目。我在 IIS 上添加了一个虚拟应用程序,并将我的项目根文件夹设置为localhost/MyWebApp
.
它经常发生,当我进行简单的页面编辑(在 .aspx 文件上)时,我的网站会丢失会话。我确信没有更改服务器端代码或没有runat=server
影响标签。
我怎样才能摆脱这个?
我正在使用 VS2012 进行开发,也与 VS2010 相同。我从事 Web 应用程序项目。我在 IIS 上添加了一个虚拟应用程序,并将我的项目根文件夹设置为localhost/MyWebApp
.
它经常发生,当我进行简单的页面编辑(在 .aspx 文件上)时,我的网站会丢失会话。我确信没有更改服务器端代码或没有runat=server
影响标签。
我怎样才能摆脱这个?
详细阐述大卫的评论:
文件更改通知
ASP.NET 2.0 依赖于文件更改通知 (FCN) 来查看应用程序是否已更新,并且根据更改的大小,应用程序池将循环使用。如果您或您的应用程序正在向应用程序文件夹添加和删除目录,那么您每次都将重新启动应用程序池。
更改以下文件还会导致应用程序池立即重新启动:
web.config machine.config global.asax Any file in the /bin directory or subfolders
更新 .aspx 文件等导致重新编译最终也会触发应用程序池的重新启动。system.web 下的编译元素有一个名为 numRecompilesBeforeAppRestart 的属性。默认值为 20,表示重新编译 20 次后应用程序池将被回收。
汉斯五世的回答:
当使用默认的 SessionState 模式“InProc”时,应用程序池回收时您的会话将丢失。发生这种情况的原因有很多,而且当您更改 aspx 文件时:
ASP.NET 依赖文件更改通知 (FCN) 来查看应用程序是否已更新。根据更改,应用程序池将回收。如果您或您的应用程序正在向应用程序文件夹添加和删除目录,您将每次都重新启动应用程序池,因此请小心这些临时文件。更改以下文件还将触发应用程序池的立即重新启动:
- 网络配置
- 机器配置
- 全球.asax
- bin 目录或其子目录中的任何内容
更新 .aspx 文件等导致重新编译最终也会触发应用程序池的重新启动。system.web 下的编译元素有一个名为 numRecompilesBeforeAppRestart 的属性。默认值为 20。这意味着在 20 次重新编译后应用程序池将被回收。