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

Вложенное приложение ASP.NET в IIS, наследующее родительские настройки конфигурации?

В настоящее время у меня есть 2 x ASP.NET 3.5 веб-приложения в IIS7 (позволяет вызывать их WebParent и WebChild).

WebChild вложен в список WebParent в IIS7 и настроен как приложение (а не только виртуальный каталог в WebParent). Оба в настоящее время используют свой собственный (классический) пул приложений.

Оба WebParent и WebChild имеют свои собственные полностью определенные файлы web.config в своих собственных корневых каталогах.

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

Может кто-нибудь объяснить, почему это может произойти?

4b9b3361

Ответ 1

Если они повторяются, вам нужно будет <remove/>, а затем в дочернем приложении web.config сначала, а затем добавить элемент, который вы хотите разместить. Это предполагает, что вы хотели бы иметь другое значение. Если вы этого не сделаете, просто опустите элемент. Строка соединения будет хорошим примером того, что, вероятно, будет распространено для всех приложений, поэтому вам нужно только указать его в корне.

Пример:

    <siteMap defaultProvider="AdminSiteMapProvider" enabled="true">
      <providers>
        <remove name="AdminSiteMapProvider"/>
        <add name="AdminSiteMapProvider" description="Admin SiteMap provider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/App_Data/admin.sitemap" securityTrimmingEnabled="true" />
      </providers>
    </siteMap>

Ответ 2

Точное решение вашей проблемы будет зависеть от того, какое сообщение об ошибке конфигурации вы видите. Однако это типичная проблема, которая часто может быть решена с помощью атрибута inheritInChildApplications элемента местоположения в web.config для "WebParent", Упаковывая весь раздел system.web в элемент местоположения следующим образом, вы должны устранить описанную проблему:

<location path="." inheritInChildApplications="false">
  <system.web>
    <!-- ... -->
  </system.web>
</location>

С IIS 7 вы также захотите обернуть секцию system.WebServer так же:

<location path="." inheritInChildApplications="false"> 
  <system.webServer>
    <!-- ... -->
  </system.webServer>
</location>

Это решение основано на превосходной статье в блоге, в которой я нашел здесь.

Ответ 3

Я думаю, что inheritInChildApplications = "false" хорош для случаев, когда вы все еще хотите наследовать часть конфигурации от родителя. В тех случаях, когда вы хотите полностью остановить наследование (как в этом случае, если я прав), я бы предложил использовать 2 отдельных пула приложений для 2 приложений, а затем применить не очень хорошо документированный параметр в файле applicationHost.config как я объяснил в этом вопросе "Запись уже добавлена ​​" - Два отдельных пула приложений

<add name="MyAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" enableConfigurationOverride="false">
    <processModel identityType="NetworkService" />
</add>

Ответ 4

Следуйте рекомендациям Scott, а также убедитесь, что вы правильно нажали WebChild в IIS и выбрали Преобразование в приложение.