你不能在你的applicationHost.config
文件中指定<appSettings>
。這是因爲applicationHost.config
僅定義了特定於IIS的設置。您可以查看applicationHost.config
架構,以確認這一點:
%systemroot%\System32\inetsrv\config\schema\IIS_schema.xml
如果你嘗試編輯applicationHost.config
並添加<appSetting>
部分站點或下<location path="...">
部分,你會得到一個錯誤(IIS可能不啓動並且IIS MMC控制檯將顯示配置錯誤)。
如果配置在IIS管理器中的全局應用程序設置這實際上獲取主web.config
文件IIS中的默認.NET Framework版本設置相匹配配置。
<appSettings/>
是特定於.NET Framework和只能在配置:
%SYSTEMROOT%\Microsoft.NET\Framework\[framework version]\CONFIG\machine.config
%SYSTEMROOT%\Microsoft.NET\Framework\[framework version]\CONFIG\web.config
%SYSTEMROOT%\Microsoft.NET\Framework64\[framework version]\CONFIG\machine.config
%SYSTEMROOT%\Microsoft.NET\Framework64\[framework version]\CONFIG\web.config
,當然,你的應用程序的app.config
或web.config
文件。
我的建議是保存這些設置您的本地應用程序,除非是難得的機會,你需要一定的價值是在全球上市。
更新:
現在,我明白你的問題 - 你有多個IIS站點,所有指向同一個物理文件夾 - 還有接近這種方式。
你可以在你的數據庫的配置表中有任何的HTTP_HOST
值是主鍵。這將映射到一個前綴,例如:
Host SitePrefix
==== ======
domain1.com D001
domain2.com D002
在你web.config
:
在你的應用程序的Application_Start
事件Global.asax.cs
初始化程序範圍的值:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
string httpHost = HttpContext.Current.Request.ServerVariables["HTTP_HOST"];
Application["SitePrefix"] = GetSiteKeyFromDb(httpHost);
}
該值將可在整個應用程序,但獨特的網站。
當你需要閱讀的設置特定於網站:
string siteSetting = ConfigurationManager.AppSettings[
HttpContext.Current.Application["SitePrefix"] + "_Setting1"
];
但是,如果你擊中Application_Start
數據庫那麼它實際上可能是有利的存儲在所有這些網站的具體設置數據庫然後在Application
中讀取並緩存它們,而不是使用<appSettings />
。
來源
2010-12-18 02:50:09
Kev
你可能是正確的...雖然它沒有給出任何錯誤,當我把該位置之下。至於具體情況......它與使用單個物理路徑來託管多個虛擬主機有關。簡短的和不幸的答案是,儘管你可以重用代碼,你仍然留下了一個單一的配置和*你*必須駕駛你的答案關閉HTTP_HOST。我試圖避免編寫代碼來處理主機特定的配置,因爲這正是IIS正在做的。哦,生活和學習。 –
Ajaxx
2010-12-19 06:03:32
@ajaxx - 當你說多個虛擬主機時,你的意思是單個站點有多個主機頭還是多個站點指向同一個物理文件夾? – Kev 2010-12-19 11:48:15
同一物理主機上的多個站點都指向相同的物理文件夾。這是一個asp.net網站,幾乎所有東西都是數據驅動的。真的沒有理由重複部署的資源,所以我們沒有。唯一的警告是我們希望能夠進行基於站點的配置 - 而不是基於物理路徑(web.config)。我們將依靠服務器變量來做出一些關鍵決策。 – Ajaxx 2010-12-19 20:33:46