IIS 7 выбрасывает ошибку "дубликат раздела" для web.config на одном сервере, но не другой

У меня есть 3 сервера, на которых работают Windows Web Server,.NET 4 и IIS7. Начальный раздел моего файла web.config:

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <configSections>
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>

Это хорошо работает на двух серверах, но один из них сообщает об ошибке:

Существует раздел дубликата 'system.web.extensions/scripting/scriptResourceHandler', который определен

в строке:

<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

Если я удалю эту единственную строку, она жалуется на дубликат следующей строки и так далее, пока я не удалю почти все разделы конфигурации.

Любая идея, что может вызвать это?


Edit:

Это приложение .NET 3.5, которое было обновлено до VS 2010 и .NET 4. На всех трех серверах установлены .NET 2/3.5 и 4. Все пулы приложений IIS были обновлены до .NET 4.

На всех трех серверах в файле machine.config уже есть некоторые из этих разделов web.config, определенных в нем (как упоминает ответ Damien), но только один из 3 жалуется на то, что он дублируется.

Ответы

Ответ 1

На "сломанном" сервере в вашем пуле приложений работает .NET 4.0. Исправление состоит в том, чтобы настроить пул приложений как .NET 2.0.

Поскольку ASP.NET AJAX был изобретен после .NET 2.0, определения конфигурации никогда не попадали в центральный web.config, поэтому вам пришлось объявлять их на основе сайта в большинстве случаев. 4.0 очистили много этой трещины, с побочным эффектом нарушения конфигураций по умолчанию для предыдущих версий ASP.NET.

Ответ 2

Проверяя machine.config на моей машине, кажется, что эти разделы уже определены. Были ли они удалены с других машин machine.config (или был ли сайт фактически запущен под более ранней версией ASP.Net на этих других серверах?)

Насколько я вижу, эти разделы определяются установкой ASP.NET 4 по умолчанию в machine.config.

Ответ 3

Я получал аналогичную ошибку в отношении дублированных разделов и исправил ее развертывание на другом веб-сайте в IIS.

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

Я просто удалил веб-сайт, создаю новый и разворачиваю там, и он сработал.