ASP.Net Inproc会话在VS2012中标记更改后重新启动,如何关闭这个?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

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

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

有一件令我讨厌的事情是,我的上一次配置(Windows 7,VS 2010,.net 4.0)没有这样的方式,InProc会话正在标记文件更改后重新启动。

例如:我登录到我的本地ASP.net应用程序,将更改保存到* .ascx文件中,刷新我的浏览器并且会话结束。

如何关闭会话重新启动问题?

我试图用新的VS 2012 Web应用程序项目模板重现问题,删除了不必要的内容,并且无法重现此问题。

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

我也将真正的项目中的web.config剥离到最低限度,看起来像新项目中的那个,但是这也不允许我去除这个bug。我在web.config中注释的内容是DevExpress Controls,自定义healthMonitoring,IIS UrlRewrite 2

Applicationpool作为集成,v4.0和NetworkService作为标识

提问于
用户回答回答于

在web.config中添加此项:

<appSettings><add key="PageInspector:ServerCodeMappingSupport" value="Disabled" /></appSettings>

问题就消失了。VS也变得更加敏捷。唯一的缺点是你失去了页面检查器的服务器端欺骗。

用户回答回答于

这里的问题是应用程序正在进行动态编译,这意味着对标记文件的任何更改都会导致应用程序重新启动。任何应用程序重新启动都会转储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服务器运行会话状态。如果.net已安装并且只需要设置为自动启动,则ASP.NET状态服务器将位于服务器上。然后你可以在配置中切换它。

<sessionState mode="StateServer" useHostingIdentity="true" cookieless="false" timeout="120" stateConnectionString="tcpip=127.0.0.1:42424" />

我们总是使用ASP.NET状态服务器进行开发,并在许多情况下用于生产。我发现在测试很长的用户路径时(比如有很多表单的表单向导),每次重建时都会让会话变得非常烦人。这也意味着你不会失去应用重新启动的会话。

也可以以相同的方式使用SQL服务器。

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

扫码关注云+社区