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

"Проблемы с System.Web.Extensions" при развертывании .Net Framework 4 на IIS7

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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. Решение -

  • Прокомментируйте код, если он вам не нужен.
  • Добавьте код ниже в группу разделов 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>

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

Я нашел ответ от Лев Тан пост:

Эта проблема не вызвана миграцией 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).

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

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

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

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

Ответ 6

Это потому, что вы развернули свое приложение на сервере 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

Запустите приложение и оно должно работать.

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

Ответ 7

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

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