Программно измените свой web.config в режиме выпуска

Я бродил по Интернету, чтобы выяснить, какое решение моей проблемы было бы лучшим, но я не могу найти удовлетворительный ответ.

Моя проблема в том, что я хочу, чтобы администратор моего веб-сайта мог изменить настройки сервера (адрес электронной почты, пароль и URL-адрес конечной точки сервера Exchange) - это должно быть возможно сделать в браузере, поэтому администратору не нужно открывать файл web.config. Настройки задаются редко, но возможность для этого ДОЛЖНА присутствовать.

Что я делаю сейчас, так это то, что как только администратор заполнит мою форму, мой контроллер установит новые значения в настройках приложения web.config:

  <appSettings>
      <add key="ewsUser" value="[email protected]" />
      <add key="ewsPW" value="somePW" />
      <add key="ewsUrl" value="https://outlook.ews.com/xxx.asmx" />
  </appSettings>

Вот где начинается мое большое беспокойство из-за всех моих исследований в Интернете. Предположим, что мое приложение сейчас находится в сети и им пользуются сотни людей 24 часа в сутки, 7 дней в неделю, будет ли это решение проблемой? Я читал, что если вы внесете изменения в файл web.config, это приведет к перезапуску вашего приложения на сервере без отключения каких-либо клиентов. Но повлияет ли это на сеанс, в котором находятся клиенты в данный момент? Сервер забудет их сеансы?

Я немного читал о неправильных методах и в этой статье говорится, как это может быть решается путем создания нового файла .config и ссылки на этот файл конфигурации в настройках приложения web.config. Но так ли это необходимо? Я нахожу это немного более грязным, чем мое текущее решение.

Будут оценены любые идеи, мысли и/или факты.


person Adam    schedule 03.10.2014    source источник


Ответы (1)


Запись в web.config действительно плохая практика. При изменении файла web.config ваше приложение перезапустится. Не уверен насчет сеансов, но они, вероятно, будут сброшены. А как насчет ситуации, когда вы развертываете новую версию своего приложения и случайно перезаписываете файл web.config? Два решения, которые могут быть полезны:

  • Создайте простую таблицу ключ/значение в базе данных
  • Создайте свой собственный формат XML и запишите/прочитайте файл (и назовите файл, например, mysettings.config вместо mysettings.xml, чтобы предотвратить прямой доступ из веб-браузера)

Чтобы ускорить работу, вы можете кэшировать эти значения в памяти после чтения.

person Marthijn    schedule 03.10.2014
comment
Спасибо за ваш ответ, Мартейн - ваши два решения также были в моем списке вариантов. Теперь вопрос вдогонку. Какое из вышеперечисленных решений было бы сложнее всего взломать? Имейте в виду, что данные в базе данных будут зашифрованы и защищены солью (по крайней мере, пароль). - person Adam; 06.10.2014
comment
Зависит от того, если у вас уже есть работающая база данных, это, вероятно, самый простой способ. XML тоже не так уж сложен, просто используйте сериализацию, и .NET справится с этим. Я также должен зашифровать пароль в файле XML. - person Marthijn; 06.10.2014