Проблема с группой конфигурации ‹system.web.extensions› при обновлении до .NET 4.0

Итак, мы обновили наш сайт с 3.5 SP1 до .NET 4.

Когда мы запустили сайт, мы получили внутреннюю ошибку сервера (500), в которой говорилось, что следующая группа конфигурации не может быть прочитана:

<system.web.extensions>
        <scripting>
            <scriptResourceHandler enableCompression="true" enableCaching="true" />
            <webServices>
                <jsonSerialization maxJsonLength="999999" />
            </webServices>
        </scripting>
    </system.web.extensions>

Мы закомментировали этот раздел, и веб-сайт заработал нормально (но теперь у нас возникают проблемы с JSON — из-за указанного выше обязательного свойства).

Мы прочитали темы по этой проблеме, и в большинстве из них говорится: «Ваш пул приложений не работает 4.0». Так и есть, так что дело не в этом.

Я также читал темы, в которых говорилось, что IIS каким-то образом читает старый файл machine.config.

Как вы знаете, в .NET 4 многие разделы web.config были перемещены в machine.config.

Итак, мы поместили этот раздел обратно в начало web.config:

<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>

И теперь сайт работает нормально.

Тем не менее, я немного обеспокоен, если это правильное решение.

Есть идеи, люди? Это правильное исправление?

ИЗМЕНИТЬ:

3 недели и никаких ответов... блин. знак равно


person RPM1984    schedule 09.07.2010    source источник
comment
У меня тоже такая же проблема, как и у вас... Я не знаю почему, но если я узнаю почему, я вернусь к вам в этой теме.   -  person justin.lovell    schedule 23.11.2011


Ответы (3)


Поскольку у меня не было ответов, и обширное гугление также не привело к любви, я решил вставить свое исходное исправление (добавив раздел system.web.extensions обратно в web.config).

person RPM1984    schedule 03.08.2010

Недавно я столкнулся с этой проблемой и смог решить ее после устранения неполадок. Надеюсь, то, что я сделал, поможет решить и вашу проблему. 1. Убедитесь, что пул приложений, который вы используете для сайта, использует конвейер .NET 4. 2. Откройте свой .csproj (или .vbproj, если у вас проект VB) в Блокноте, просмотрите файл и проверьте, есть ли какие-либо жестко закодированные ссылки на файлы Framework версии 2.0. В моем случае у нас была задача «После сборки», в которой использовался путь компилятора версии 2.0, что заставляло приложение по-прежнему использовать среду выполнения 2.0. Это было как ниже.

<Target Name=”AfterBuild” Condition=”’$(MvcBuildViews)’==’true’”>
<AspNetCompiler Condition=”’$(IsDesktopBuild)’ != ‘false’” VirtualPath=”temp” ToolPath=”$(WINDIR)\Microsoft.NET\Framework\v2.0.50727” PhysicalPath=”$(ProjectDir)\..\$(ProjectName)” />
<AspNetCompiler Condition=”’$(IsDesktopBuild)’ == ‘false’” VirtualPath=”temp” ToolPath=”$(WINDIR)\Microsoft.NET\Framework\v2.0.50727” PhysicalPath=”$(OutDir)\_PublishedWebsites\$(ProjectName)” />

Make sure to change them to v4.0 or even better make them confiurable. Hope that helps.

-Вамси

person Vamsi Krishna    schedule 31.12.2010

Еще два кусочка информации, которые могут помочь, а могут и не помочь.

  1. единственное отличие от вышеупомянутой sectionGroup и моей машины sectionGroup — это версия = 3.5.0.0 здесь и версия = 4.0.0.0 в machine.config. 1.
  2. Ошибка в журнале событий: "Не удалось загрузить все фильтры ISAPI для сайта..." Может ли быть установка System.Web.Extensions, которая не зарегистрирована должным образом в .net 4?

Я бы хотел больше узнать об этом, но, к сожалению, я вижу такое поведение только в производственной системе, а не в системе разработки.

person ctc    schedule 13.10.2010