2

我正在用VS2012进行开发,它也和VS2010一样。我正在开发一个Web应用程序项目。我在IIS上添加了一个虚拟应用程序,并将我的项目根文件夹设置为localhost/MyWebApp编辑aspx页面导致会话丢失

它经常发生,当我做一个简单的页面编辑(在.aspx文件)我的网站失去会议。我相信没有服务器端代码被更改或者没有runat=server标记受到影响。

我该如何摆脱这个?

+3

页面编辑导致Web应用程序重新启动IIS中。您可能需要考虑将会话状态移至SQL服务器或IIS进程之外的某个位置。 – David

回答

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

+0

谢谢..我也发现[http://support.microsoft.com/kb/319947](http://support.microsoft.com/kb/319947)并给出这样的配置 karanba

3

回答汉斯五:

当使用缺省SessionState的模式 “是InProc”,你当应用程序池回收会议将 丢失。 Therer的原因是多方面 为什么这可能发生,而且当您更改ASPX文件:

ASP.NET取决于文件更改通知(FCN),看是否 应用更新。根据更改,应用程序 池将回收。如果您或您的应用程序正在将 目录添加到应用程序文件夹中并将其删除,则每次都将重新启动您的 应用程序池,因此请注意这些临时文件 。改变下列文件也将立即触发 重新启动应用程序池:

  • 的web.config
  • 的machine.config
  • Global.asax的
  • 任何bin目录或它的子目录

更新.aspx文件等导致重新编译最终还会触发应用程序池的重新启动。 system.web中的编译元素的 属性称为 numRecompilesBeforeAppRestart。默认值是20.这意味着 在20次重新编译之后,应用程序池将会回收。

Answer reference