背景信息:文件複製是瘸子服務器特定的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