asp.net-mvc - 编辑 Web.config 文件是否会触发重叠回收或应用程序池的启动+停止?

标签 asp.net-mvc iis-7.5 web-farm

我有 Overlapping Recycling为我的 ASP.NET MVC 站点配置。

据我所知( from this SO question ),如果我回收应用程序池,这将启动一个新的 w3wp.exe 进程来承担正在回收的进程的负载,并且只有在新进程初始化并承担负载时, 是否会关闭旧进程。如果我停止/启动应用程序池,它会立即终止而不让进程正常退出或让替换进程先启动。

问题:当我编辑我的 Web.config 文件时,它会重新启动关联的 IIS 应用程序池。这会触发很好的重叠回收行为,还是残酷的停止/启动行为?

我正在尝试决定是否需要将服务器从负载平衡场中取出并停止服务器流量以编辑配置设置。

最佳答案

我决定用科学。我在负载测试工具下对我的服务器进行了一项实验,在那里我反复编辑和保存我的 Web.config 文件,同时请求涌入。

将更改保存到 Web.config 文件时,未丢弃任何请求。

在加载新设置时,我确实观察到了 CPU 事件的短暂峰值,但实际上几乎没有注意到。

我能够通过使 Web.config 文件格式错误并保存它来证明设置正在加载。这立即导致请求开始失败。

令我惊讶的是process id没有随 Web.config 编辑而改变。我对 IIS 重叠回收的理解是让 IIS 启动一个新的 w3wp.exe 进程,然后关闭旧的进程。这意味着不同的进程 ID。所以我不认为重叠回收在这里开始。

process id是一样的,那么我认为它是一个完全独立的机制,可以加载/卸载 AppDomain。这似乎得到了 this document 的支持,相关位转载如下:

Configuration Changes Cause a Restart of the Application Domain

Changes to configuration settings in Web.config files indirectly cause the application domain to restart. This behavior occurs by design. You can optionally use the configSource attribute to reference external configuration files that do not cause a restart when a change is made. For more information, see configSource in General Attributes Inherited by Section Elements.



TLDR

重叠回收或残酷的停止/启动行为都不是由 Web.config 编辑引起的。 AppDomain 会重新加载新设置,而不会中断请求处理。

http://msdn.microsoft.com/en-us/library/ackhksh7.aspx

关于asp.net-mvc - 编辑 Web.config 文件是否会触发重叠回收或应用程序池的启动+停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705527/

相关文章:

asp.net - 如何从 ASP.NET MVC 中的表单例份验证中拦截 401?

asp.net-mvc - Knockout、CKEditor 和单页应用程序

url-rewriting - 将 url 重写为 url :port number

asp.net - 如何使用 SQL Server session 管理检查 ASPState 数据库中的 session 值(用户是否存在)

asp.net-mvc - MVC6 dnx451 Nhibernate 在 hasbind 上出现 nullreferenceException

visual-studio-2010 - VS2010 TFS Build Failure-无法完成对远程代理的请求

sql-server - 将 ASP.NET MVC 应用程序的 IIS 7.5 应用程序池标识配置为 SQL Server 2008 R2 上的登录名

SharePoint In 2 Locations - 有什么方法可以让两者都快吗?

asp.net-mvc - 如何让浏览器链接在 asp mvc 6 项目中工作