我将开发机器升级到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 as Integrated,v4.0,NetworkService为Identity
答案 0 :(得分:8)
我不打算为此获得赞誉,但答案被隐藏在@ Anand原始问题的第11条评论中:
在web.config中添加此密钥:
<appSettings><add key="PageInspector:ServerCodeMappingSupport" value="Disabled" /></appSettings>
问题就消失了。 VS也变得更加敏感。唯一的缺点是你从Page Inspector失去了服务器端的诡计。
希望MS能尽快提供解决方案..
答案 1 :(得分:2)
这里的问题是您的应用程序正在进行动态编译,这意味着对标记文件的任何更改都将导致应用程序重新启动。如您所知,任何应用程序重新启动都将转储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状态服务器将位于您的服务器上,只需将其设置为自动启动。然后,您可以在配置中将其切换。
<sessionState mode="StateServer" useHostingIdentity="true" cookieless="false" timeout="120" stateConnectionString="tcpip=127.0.0.1:42424" />
我们总是使用ASP.NET状态服务器进行开发,并且在很多情况下都是在生产中运行。 我发现在测试长用户路径时(比如一个有很多表单的表单向导),每次重建时都会讨论会话,这非常烦人。这也意味着你不会因重新启动app而失去会话。
您也可以以相同的方式使用SQL Server。
注意:您必须记住,如果要将类序列化为会话状态并进行更改,则需要手动重新启动状态服务器,否则将出现序列化错误。这是非常罕见的,但只是在生产环境中要注意。
答案 2 :(得分:0)
使用进程内模式时,会话数据托管在服务器内存中。您应该在IIS上验证应用程序池的循环时间。
干杯,
答案 3 :(得分:0)
您可以尝试SQL服务器会话状态模式。
答案 4 :(得分:0)
一个可能相关的问题: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