Может ли web.config читать из внешнего XML-файла? - PullRequest
18 голосов
/ 09 марта 2010

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

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

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

Ответы [ 4 ]

19 голосов
/ 09 марта 2010

Да, любая конфигурация секция может быть "внешне" - это включает в себя такие вещи, как <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.

11 голосов
/ 09 марта 2010

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

Вот пример моих настроек:

<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>

В моем случае у меня есть несколько приложений Windows в корневой папке, которые включают веб-приложение в качестве подпапки. Это позволяет файлу конфигурации каждого приложения указывать на общие конфигурации.

1 голос
/ 09 марта 2010

вы можете указать ваши строки подключения за пределами вашего web.config http://blog.andreloker.de/post/2008/06/Keep-your-config-clean-with-external-config-files.aspx но он должен быть в том же каталоге.

1 голос
/ 09 марта 2010

если можете, просто объедините конфигурации в Machine.Config. Они оба могут читать оттуда, и каждый web.config может переопределять любые нужные вам значения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...