Подтвердить что ты не робот

Может ли web.config читать из внешнего XML файла?

Мне нужно дублировать некоторые параметры (например, строку соединения) между файлом web.config, который использует хост WCF, и файл web.config, который использует веб-клиент.

В интересах не дублирования, могу ли я использовать web.configs из отдельного XML файла? Два web.configs могут быть полностью в разных решениях/проектах, поэтому я думаю, что это невозможно, но хотелось получить другое мнение.

PS: Я понимаю, что я могу использовать базу данных для хранения всех настроек конфигурации.

4b9b3361

Ответ 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 может отменить любые значения, которые вам нужны.

Я говорю, если вы можете, потому что я знаю, что многие хостинговые компании не позволят вам изменять его, если вы не арендуете выделенный сервер.