首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在VS2012中更改标记后,ASP.Net Inproc会话重新启动

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

Stack Overflow用户
提问于 2012-10-28 00:16:02
回答 5查看 4.5K关注 0票数 16

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

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

令我恼火的一件事是,在我的上一次配置(Windows7,VS2010,.net 4.0)中,InProc会话在标记文件更改后重新启动。

例如:我登录到我本地的ASP.net应用程序,在*.ascx文件中进行更改并保存更改,刷新我的and浏览器,然后会话就消失了。

如何关闭会话重启问题?

编辑:我试图用新的VS2012Web应用程序项目模板再现这个问题,删除了不必要的内容,但无法再现这个问题。

然而,在我的实际项目中,这个问题仍然存在:更改aspx或aspx文件会导致触发Application_Start事件。

为了看起来像新项目中的web.config,我还将真实项目中的bug精简到了最低限度,但这也不允许我删除这个bug。我在web.config中注释掉的是DevExpress控件、自定义healthMonitoring、IIS UrlRewrite 2

作为集成的应用程序池,使用NetworkService作为标识的v4.0

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-06 18:04:40

我不打算为此承担责任,但答案隐藏在@Anand对原始问题的第11条评论中

在web.config中添加此密钥:

代码语言:javascript
复制
<appSettings><add key="PageInspector:ServerCodeMappingSupport" value="Disabled" /></appSettings>

这样问题就消失了。VS也变得更具响应性。唯一的缺点是你失去了来自Page Inspector的服务器端技巧。

希望微软能很快提供解决方案..

票数 8
EN

Stack Overflow用户

发布于 2012-11-05 18:17:07

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

本地模板上的"Web应用程序“的设置有所不同,因此不会重新启动整个应用程序。尽管如此,预编译还是有好处的。

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

为什么会发生这种情况

默认情况下,ASP.NET 4.5允许您同时运行"web页面“和"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状态服务器将位于您的服务器上。然后,您可以在配置中对其进行切换。

代码语言:javascript
复制
<sessionState mode="StateServer" useHostingIdentity="true" cookieless="false" timeout="120" stateConnectionString="tcpip=127.0.0.1:42424" />

我们总是使用ASP.NET状态服务器进行开发,在许多情况下,在生产中也是如此。我发现在测试较长的用户路径时(就像具有许多表单的表单向导),每次重新构建时都会有会话对话,这是非常恼人的。这也意味着你不会在应用重启时丢失会话。

您也可以以同样的方式使用SQL server。

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

票数 3
EN

Stack Overflow用户

发布于 2012-10-31 00:06:43

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

干杯,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13101888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档