Проблема «System.Web.Extensions» при развертывании веб-сайта .Net Framework 4 на IIS7 - PullRequest
20 голосов
/ 23 марта 2010

Я пытаюсь развернуть веб-сайт .Net framework 4 на сервере IIS7. Я уже изменил целевую платформу пула приложений на .Net 4, но приложение все еще показывает мне ошибку:

«Невозможно прочитать раздел конфигурации« system.web.extensions », так как в нем отсутствует объявление раздела»

Я предполагаю, что это как-то связано с новой функцией .Net4, которая позволяет мне иметь компактный файл веб-конфигурации. Я думаю, что по какой-то причине IIS7 это не устраивает.

Что я могу сделать, чтобы успешно развернуть это приложение, или мне нужно вернуться к версии 3.5? Я уверен, что есть решение.

Есть ли у вас какие-либо предложения?

Ответы [ 7 ]

30 голосов
/ 14 мая 2010

Вы можете также получить эту же ошибку, если создадите новый веб-сайт в IIS 7 (.5), так как пул приложений, который он создает для нового сайта, все еще может иметь значение 2.0, и поэтому system.web.extensions недопустимо в файле конфигурации 2.0.

Просто зайдите в диспетчер IIS, выберите пулы приложений, выберите тот для своего приложения, щелкните правой кнопкой мыши, Дополнительные параметры и установите версию .NET Framework v4.

10 голосов
/ 07 марта 2011
Module  IIS Web Core
Notification    BeginRequest
Handler Not yet determined
Error Code  0x80070032
Config Error    The configuration section 'system.web.extensions' cannot be read because it is missing a section declaration 
Config File \\web.config

Ошибка связана с тем, что этот раздел system.web.extensions добавлен в Web.config

<system.web.extensions>
<scripting>
<webServices>
<!-- Uncomment this line to customize maxJsonLength and add a custom converter
   <jsonSerialization maxJsonLength="1024000">
-->
</webServices>
<scriptResourceHandler enableCompression="true" enableCaching="true"/>
</scripting>
</system.web.extensions>

По какой-то причине добавление этого раздела переопределяет группу system.web.extensions. Решение

  1. Прокомментируйте код выше, если он вам не нужен.
  2. Добавьте приведенный ниже код в группу разделов Web.config

..

<sectionGroup name="system.web.extensions"         type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
        <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
    </sectionGroup>
</sectionGroup>
</sectionGroup>
4 голосов
/ 23 марта 2010

Я мог бы решить эту проблему сам после некоторой охоты вокруг (случается!).

, очевидно, не имеет никакого отношения к структуре файла конфигурации, это сборка для ASP.Net Ajax, которая не развернута на моем целевом сервере, но может присутствовать на моем компьютере разработчика.

Я удалил запись из файла web.config, и эта проблема была решена, были некоторые другие незначительные проблемы, но ничего не стоило упоминать.

Опыт развертывания IIS7 + .Net Framework 4 не былЭто слишком сложно, и дополнительные возможности будут стоить того.

3 голосов
/ 29 августа 2011

Я нашел ответ от Leo Tang post :

Эта проблема не вызвана миграцией web.config. Если вы обновите свое приложение до .Net Framework4.0, но назначите его для пула приложений, работающих под управлением .Net Framework3.5 или более ранней версии, вы столкнетесь с этой ошибкой. Вы можете назначить это приложение пулу приложений .Net Framework4.0 в IIS для устранения проблемы.

Итак, если вы прочитали ошибку Раздел конфигурации 'system.web.extensions' не может быть прочитан, поскольку в нем отсутствует объявление раздела Это потому, что развернутое приложение работает в настроенном пуле приложений. работать в .NET 2.0 или 3.5 (DefaultAppPool? DefaultAppPool по умолчанию установлено в .NET 2.0).

Выполните следующие шаги:

  1. Выполнить IIS (exec 'inetmgr' )
  2. Выберите ваше приложение (вероятно, 'Сервер \ Сайты \ Веб-сайт по умолчанию \ Имя вашего приложения' из дерева на левой панели)
  3. Откройте настройки вашего приложения (нажмите «Основные настройки» из «Действия» на правой панели) и посмотрите на приложение бассейн .

  4. Теперь выберите действие, которое наилучшим образом соответствует вашим потребностям:

    • Вы можете изменить пул приложений для вашего приложения (кнопка , выбрать в форме «Редактирование приложения» , затем выбрать 'ASP.NET v4 -0 Классик '). Это изменение повлияет только на это приложение
    • ИЛИ вы можете отредактировать пул приложений (вероятно, Сервер \ Пулы приложений \ DefaultAppPool из дерева слева) и настроить его для работы в .NET Framevork v4.0. Будьте осторожны: это изменение повлияет на каждое приложение в этом пуле приложений ... это то, что вы хотите? может быть ...
3 голосов
/ 26 мая 2011

Если "aspnet_regiis.exe -iru" не помогает и вы уверены, что пытаетесь запустить сайт из пула приложений .NET 4.0, это может быть проблемой в наследовании конфигурации IIS 7.0.Веб-сервер читает machine.config .NET 2.0.Применение исправления KB958854 решило бы проблему с наследованием конфигурации.Я успешно исправил свою проблему таким образом.

2 голосов
/ 28 октября 2011

Это потому, что вы развернули свое приложение на IIS-сервере, где AppPool приложения настроен для запуска под DefaultAppPool.DefaultAppPool автоматически настраивается для работы под .NET 2.0, а не .NET 4.0.Это означает, что материал System.Web.Extensions недоступен для этой версии .NET Framework.

Чтобы изменить параметры пула приложений (AppPool) для вашего веб-приложения

1. Select the application directory 
2. Under Actions, click Basic Settings…
3. Change the Application Pool to ASP.NET v4.0 (or another .NET 4.0 app pool) by clicking on the Select… button.
4. Click OK

Re- запустите ваше приложение, и оно должно работать.

Проверьте эту ссылку для графической демонстрации.

1 голос
/ 26 апреля 2013

Я решил проблему, выполнив следующие действия: 1. установите каркас пула приложений на 4.0
2. Если точка 1 не работает, проблема может быть связана с наследованием конфигурации. Применить исправление от http://support.microsoft.com/kb/958854

Это должно решить проблему.

...