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.
Я просто удалил веб-сайт, создаю новый и разворачиваю там, и он сработал.