Web.Config Откат к глобальной конфигурации в веб-ферме - PullRequest
1 голос
/ 28 октября 2008

У этой проблемы несколько человек в офисе. Мы все новички в развертывании приложений ASP.NET на веб-ферме, и у меня нет идей.

У нас есть веб-ферма, и приложение копируется на все из них. Тем не менее, у нас проблема ..

Исключение выдается при попытке получить настройки из appSettings. После дальнейшего исследования выясняется, что узел на самом деле не использует локальный Web.Config, но возвращается к Web.Config в папке .NET Framework (мы доказали это, добавив туда ключи, которые появляются на тестовой странице) .

Я, должно быть, что-то упустил, потому что, насколько я понимаю, пока файл существует, IIS должен его использовать! Один из серверов работает нормально!

Вот список того, что мы подтвердили:

  • Файл конфигурации находится в каталоге приложения.
  • Указанное содержимое файла является правильным.
  • При просмотре файла из IIS> Сайт> Свойства> ASP.NET> Изменить конфигурацию отображается правильное содержимое.

Однако во время выполнения используемый файл является глобальным (windows\ms .net\framework\v2\config\web.config).

У кого-нибудь есть предложения относительно того, что может пойти не так? Цените всю помощь, которую я могу получить!

Спасибо.

Rob

Ответы [ 3 ]

6 голосов
/ 28 октября 2008

Это иерархия для конфигурации ASP.NET. Возможно, это поможет понять, какие настройки перезаписывают друг друга.

Сервер

Machine.config: файл Machine.config содержит схему ASP.NET для всех веб-приложений на сервере. Этот файл находится в верхней части иерархии слияния конфигурации.

Root Web

Web.config: файл Web.config для сервера хранится в том же каталоге, что и файл Machine.config, и содержит значения по умолчанию для большинства разделов конфигурации system.web. Во время выполнения этот файл объединяется вторым сверху в иерархии конфигурации.

Веб-сайт

Web.config. Файл Web.config для определенного веб-сайта содержит параметры, которые применяются к веб-сайту и наследуются всеми приложениями и подкаталогами сайта ASP.NET.

корневой каталог приложения ASP.NET

Web.config. Файл Web.config для конкретного приложения ASP.NET находится в корневом каталоге приложения и содержит параметры, которые применяются к веб-приложению и наследуются вниз по всем подкаталогам в его ветви.

Подкаталог приложения ASP.NET

Web.config: файл Web.config для подкаталога приложения содержит параметры, которые применяются к этому подкаталогу и наследуются вниз по всем подкаталогам в его ветви.

Каталог клиентских приложений

ApplicationName.config: файл ApplicationName.config содержит настройки для клиентского приложения Windows (не веб-приложения).


Понимание того, какие файлы и папки ASP.NET наследуются через папки и приложения, очень важно для разработки и устранения неполадок.

Вот краткое резюме:

  • Файлы web.config наследуются по всему дереву, за пределами всех границ приложения.
  • global.asax живет только внутри своего приложения
  • / bin и / app_ {папки} живут только внутри своего приложения

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

В этом случае возникает проблема, если в файле web.config есть ссылки на сборки, но в подпрограммах таких сборок нет. Например, предположим, что у вас есть HTTP-модуль, настроенный в корне сайта и указанный в файле site.config сайта. Если у вас есть вложенное приложение с именем / subfolder, которое помечено как приложение, то / subfolder попытается загрузить обработчик HTTP из / subfolder / bin. Так как он не существует, будет сгенерирована ошибка.

Есть несколько способов обойти это. Вероятно, самым чистым, если в подпапке / не требуется HTTP-обработчик, является «удаление» ссылки путем добавления предложения в файл /subfolder/web.config. Вы можете сделать это с. Вот пример того, как удалить модуль HTTP в подпапке:

<httpModules>
  <remove name="ErrorLog"/>
</httpModules>

Вот как может выглядеть сайт web.config:

<httpModules>
      <add name="ErrorLog"  type="GotDotNet.Elmah.ErrorLogModule, GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral, PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>print("code sample");
0 голосов
/ 31 октября 2008

Прежде всего, большое спасибо ребятам, которые ответили, я очень ценю помощь!

Просто обновление по этому вопросу. Это был тяжелый!

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

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

Полагаю, мы никогда не узнаем, что случилось, но, по крайней мере, мы знаем, что это не проблема разработки!

Еще раз спасибо, Rob

0 голосов
/ 28 октября 2008

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

Что произойдет, если вы вставите ошибочную запись по назначению? Сбой приложения или это ни на что не влияет?

Попробуйте скопировать содержимое, а затем удалите и заново создайте этот файл с нуля.

...