2

我正在使用 VS2012 进行开发,也与 VS2010 相同。我从事 Web 应用程序项目。我在 IIS 上添加了一个虚拟应用程序,并将我的项目根文件夹设置为localhost/MyWebApp.

它经常发生,当我进行简单的页面编辑(在 .aspx 文件上)时,我的网站会丢失会话。我确信没有更改服务器端代码或没有runat=server影响标签。

我怎样才能摆脱这个?

4

2 回答 2

5

详细阐述大卫的评论:

文件更改通知

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 次后应用程序池将被回收。

摘自:Losing ASP.NET Sessions - Why Application Pools recycle

于 2013-01-02T14:55:21.273 回答
3

汉斯五世的回答:

当使用默认的 SessionState 模式“InProc”时,应用程序池回收时您的会话将丢失。发生这种情况的原因有很多,而且当您更改 aspx 文件时:

ASP.NET 依赖文件更改通知 (FCN) 来查看应用程序是否已更新。根据更改,应用程序池将回收。如果您或您的应用程序正在向应用程序文件夹添加和删除目录,您将每次都重新启动应用程序池,因此请小心这些临时文件。更改以下文件还将触发应用程序池的立即重新启动:

  • 网络配置
  • 机器配置
  • 全球.asax
  • bin 目录或其子目录中的任何内容

更新 .aspx 文件等导致重新编译最终也会触发应用程序池的重新启动。system.web 下的编译元素有一个名为 numRecompilesBeforeAppRestart 的属性。默认值为 20。这意味着在 20 次重新编译后应用程序池将被回收。

答案参考

于 2013-01-02T14:55:32.503 回答