it-roy-ru.com

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>

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

Существует дубликат раздела 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" />

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

Есть идеи, что вызвало бы это?


Правка:

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

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

16
CodingWithSpike

На «сломанном» сервере ваш пул приложений работает под управлением .NET 4.0. Чтобы исправить это, нужно настроить пул приложений на .NET 2.0.

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

25
Wyatt Barnett

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

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

2
Damien_The_Unbeliever

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

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

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

0
Juan