Может ли web.config читать из внешнего XML файла?
Мне нужно дублировать некоторые параметры (например, строку соединения) между файлом web.config, который использует хост WCF, и файл web.config, который использует веб-клиент.
В интересах не дублирования, могу ли я использовать web.configs из отдельного XML файла? Два web.configs могут быть полностью в разных решениях/проектах, поэтому я думаю, что это невозможно, но хотелось получить другое мнение.
PS: Я понимаю, что я могу использовать базу данных для хранения всех настроек конфигурации.
Ответы
Ответ 1
Да, любая конфигурация section может быть "экрнализирована" - это включает в себя такие вещи, как <appSettings>
, <connectionStrings>
и многие другие.
У вас есть что-то подобное в вашем web.config:
<configuration>
<appSettings configSource="appSettings.config" />
<connectionStrings configSource="connectionStrings.config" />
<system.web>
<pages configSource="pages.config" />
<httpHandlers configSource="httphandlers.config">
</system.web>
</configuration>
Внешняя конфигурация будет содержать только один подраздел:
httphandlers.config:
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
Обратите внимание, что вы не можете экрнализировать всю часть <system.web>
, так как это группа группы - не раздел конфигурации, но вы можете экрнализировать большинство разделов, содержащихся в файле system.web.
Ответ 2
Файл конфигурации может указывать на другие файлы конфигурации, если файлы находятся в одном пути (включая подкаталоги).
Вот пример моих настроек:
<connectionStrings configSource="web\config\connectionStrings.config" />
<appSettings configSource="web\config\appSettings.config" />
<system.diagnostics configSource="web\config\diagnostics.config" />
<system.serviceModel>
<bindings configSource="web\config\serviceModelBindings.config" />
<behaviors configSource="web\config\serviceModelBehaviors.config" />
<services configSource="web\config\serviceModelServices.config" />
<client configSource="web\config\serviceModelClient.config" />
</system.serviceModel>
В моем случае у меня есть несколько оконных приложений в корневой папке, которые включают веб-приложение в качестве подпапки. Это позволяет каждому конфигурационному файлу приложения указывать общие конфигурации.
Ответ 3
если вы можете, просто поместите общие конфигурации в Machine.Config. Оба они могут читать оттуда, и каждый web.config может отменить любые значения, которые вам нужны.
Я говорю, если вы можете, потому что я знаю, что многие хостинговые компании не позволят вам изменять его, если вы не арендуете выделенный сервер.
Ответ 4
вы можете указать свои строки подключения вне вашего web.config
http://blog.andreloker.de/post/2008/06/Keep-your-config-clean-with-external-config-files.aspx
но он должен находиться в одном каталоге.