Вы не можете указать <appSettings>
в вашем applicationHost.config
файле. Это связано с тем, что applicationHost.config
определяет настройки, относящиеся только к IIS. Вы можете просмотреть схему applicationHost.config
, чтобы подтвердить это:
%systemroot%\System32\inetsrv\config\schema\IIS_schema.xml
Если вы попытаетесь отредактировать applicationHost.config
и добавить раздел <appSetting>
на сайт или в раздел <location path="...">
, вы получите ошибку (IIS может не запуститься, и консоль IIS MMC отобразит ошибку конфигурации).
Если вы настраиваете глобальный параметр приложения в диспетчере IIS, он фактически настраивается в основном файле web.config
, который соответствует настройке версии .NET Framework по умолчанию в IIS.
<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 />
.