在VS2012中更改标记后,ASP.Net Inproc会话重新启动

我将我的开发机器升级到Windows 8和Visual Studio 2012。

我正在本地IIS上测试我的ASP.Net应用程序(也升级到.net 4.5)。

令我烦恼的一件事是,我的上一次配置(Windows 7,VS 2010,.net 4.0)不是这种方式,是在标记文件发生更改后重新启动InProc会话。

示例:我已登录到我的本地ASP.net应用程序,在* .ascx文件中创建并保存更改,刷新我的webbrowser并且会话消失了。

如何关闭会话重启问题?

编辑 :我尝试使用新的VS 2012 Web应用程序项目模板重新解决此问题,删除了不必要的内容,但无法重现此问题。

但是,在我的真实项目中,问题仍然存在:对aspx或ascx文件的更改导致Application_Start事件被触发。

我还将我的真实项目中的web.config剥离到最低限度,看起来像新项目中的那个,但是这也不允许我删除错误。 我在web.config中注释掉的东西是DevExpress Controls,自定义healthMonitoring,IIS UrlRewrite 2

Applicationpool为Integrated,v4.0,NetworkService为Identity

我不打算为此获得赞誉,但答案被埋在了@Anand对原始问题的第11条评论中:

在web.config中添加此密钥:

 

问题就消失了。 VS也变得更加敏感。 唯一的缺点是你从Page Inspector失去了服务器端的诡计。

希望MS能尽快提供解决方案..

这里的问题是您的应用程序正在进行动态编译,这意味着对标记文件的任何更改都将导致应用程序重新启动。 如您所知,任何应用程序重新启动都将转储InProc会话。

本地模板上的“Web应用程序”设置不同,因此不会重新启动整个应用程序。 虽然有预编译的优点。

有几种方法可以解决这个问题。

为什么会这样

ASP.NET 4.5允许您默认情况下与“Web应用程序”并排运行“网页”。 这可能是导致aspx发生更改以触发预先查询的原因(每次发生更改时“网页”都必须这样做)。 更多信息: http : //msdn.microsoft.com/en-us/library/dd547590.aspx

在新版本中优化Web服务器也有很多变化。 您可以在此处查看这些更改的详细信息,还可以在升级时解释更改。 http://www.asp.net/vnext/overview/aspnet/whats-new

无论如何,解决方案仍然是相同的,并且不建议动态更新单个aspx文件。 如果它是不可避免的,那么最终将在任何设置上重新启动,所以无论如何都值得使用以下解决方案之一。

解决方案

编译模式

检查web.config中的CompilationMode。 欲了解更多信息,请查看这篇文章http://www.campusmvp.net/compilationmode-avoiding-aspx-page-compilation-to-improve-scalability-in-sites-with-thousands-of-pages/

这也可以在服务器级别设置,以便您可以通过环境获得差异。

会话状态模式

您可以在StateServer模式下或使用Sql server运行会话状态。 如果安装了.net,则ASP.NET状态服务器将位于您的服务器上,只需将其设置为自动启动。 然后,您可以在配置中切换它。

  

我们总是使用ASP.NET状态服务器进行开发,并且在许多情况下都在生产中。 我发现在测试长用户路径时(比如一个有很多表单的表单向导),每次重建时都会讨论会话,这非常烦人。 这也意味着您不会因应用重启而丢失会话。

您也可以以相同的方式使用SQL Server。

注意:您必须记住,如果要将类序列化为会话状态并进行更改,则需要手动重新启动状态服务器,否则将出现序列化错误。 这是非常罕见的,但只是在生产环境中要注意。

使用进程内模式时,会话数据托管在服务器内存中。 您应该在IIS上validation应用程序池的回收时间。

干杯,

您可以尝试SQL Server会话状态模式。

一个可能相关的问题:IIS(以及ASP.NET Development Server)在您从TFS 签出文件后重新启动应用程序。

我在这里找到了解决方案: http : //forums.iis.net/p/1200785/2055480.aspx/1?IIS+Express+restarts+site+when+a+file+is+checked+out

  1. 导航到: %USERPROFILE%\ AppData \ Roaming \ Microsoft \ VisualStudio \ 11.0
  2. 删除app_offline.htm文件。
  3. 创建名为app_offline.htm的文件夹