背景信息:文件复制是瘸子服务器特定的web.config从共享驱动器托管
目前,我们有一个庞大的,高流量的ASP.NET Web应用程序的负载平衡跨越8个不同的IIS服务器。由于网站的性质,对.aspx文件和.ascx控件的轻微更改经常会在整个一天发生,并且在经过测试并发布到现场后,会按计划每隔xcopy部署将其复制到每个公共Web服务器10分钟。
当然这是非常低效的,因为每个服务器都必须有整个站点的冗余副本,并且我们希望消除10分钟的发布滞后。
可能的改进:从共享存储主机
我们现在必须使用集中存储与iSCSI接口集中托管整个网站,每个服务器认为远程存储是一个本地驱动器的选项。发布会是即时和全系统的。
注意:将驱动器托管在UNC共享上是不可能的,因为站点结构中有许多不同的目录,每个目录都需要用于ASP.NET的FileSystemWatcher来监视更改,SMB最大命令数是迅速到达。是的,我们知道MaxCmds和MaxMpxCt注册表设置。
问题:Web.config中的变化引发大规模的重新编译
我们预见的问题是文件系统结构中的某些变化可能会造成几乎所有的编译的.aspx或.ASCX不得不重新编译,从而导致排队的请求和服务器关闭的感觉。大多数资源并未在系统范围内使用,因此重新编译这些资源不会导致资源浪费。网站上所有页面使用的全局主页面可能导致这种情况,但这可以通过代码轻松管理。
主要的罪魁祸首是web.config文件。对web.config文件的更改会导致整个Web应用程序回收并重新编译。所以,我们目前不复制web.config更改。任何web.config更改都需要将Web服务器从负载平衡器中取出,应用(和测试)更改,然后在将服务器放回负载平衡器之前使用垃圾请求升温服务器。
但是,如果web.config文件与其他Web应用程序的目录结构一样位于集中式存储中,则只有该文件的一个副本,并且单个服务器不能再被修补和预热。
问题
有没有办法得到一个ASP.NET Web应用程序把它的行军命令从比一个名为Web.config文件以外的来源?
理想情况下,将每台服务器一个文件,例如:
- 的Default.aspx
- Global.asax的
- 网络ServerA.config
- 网络服务器B。配置
- ...
- 网络ServerN.config
在哪里名字的 “web.config” 无论如何定义?是否有可以基于每个服务器设置的注册表设置?是否有可以在machine.config或全局web.config中指定要使用的文件的条目?
事情超出范围
只是让我很清楚,我不问如何有调试,测试不同的AppSettings,和生活。还有其他一些话题涵盖了这一点,并且我的所有web.configs在大多数时间都是相同的,唯一需要它们的地方是更新时间。
我们没有使用任何appSettings信息的web.config;这是非常重要的东西,比如程序集引用,httpHandler定义以及其他不能基于数据库的system.web设置。
更新
我试图寻找在注册表中的Web.config,并没有发现什么不同的是指出,我最近编辑的web.config文件中,这是我显然做了很多的应用。没有帮助。
你使用的是II6还是IIS7? – 2009-05-14 14:26:05
此刻IIS6,但升级到IIS7是在远程计划。我认为需要IIS7的解决方案就好了。 – 2009-05-15 13:50:49