编辑aspx页面导致会话丢失

时间:2013-01-02 14:35:42

标签: asp.net visual-studio-2010 web-applications visual-studio-2012

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

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

我怎样摆脱这个?

2 个答案:

答案 0 :(得分:5)

阐述大卫的评论:

  

文件更改通知

     

ASP.NET 2.0依赖于文件更改通知(FCN)来查看是否存在   应用程序已更新,具体取决于更改的大小   应用程序池将回收。如果您或您的申请是   添加和删​​除目录到应用程序文件夹,然后你   将每次都重新启动您的应用程序池。

     

更改以下文件也会导致立即重启   应用程序池:

web.config
machine.config
global.asax
Any file in the /bin directory or subfolders 
     

更新.aspx文件等导致重新编译最终会触发a   也重启应用程序池。有一个属性   system.web下的编译元素调用   numRecompilesBeforeAppRestart。默认值为20,表示   在20次重新编译后,应用程序池将重新编译。

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

答案 1 :(得分:3)

Hans V的回答:

  

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

     

ASP.NET依赖于文件更改通知(FCN)来查看是否存在   应用程序已更新。取决于应用程序的更改   游泳池将回收。如果您或您的应用程序正在添加和删除   目录到应用程序文件夹,您将重新启动您的   每次应用程序池,所以要小心那些临时的   文件。更改以下文件也会立即触发   重启应用程序池:

     
      
  • web.config
  •   
  • machine.config
  •   
  • global.asax
  •   
  • bin目录中的任何内容或其子目录
  •   
     

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

Answer reference