10

所以我们已经从 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 周,没有答案......该死的。=)

4

3 回答 3

2

由于我没有答案,而且广泛的谷歌搜索也没有得到任何爱,我决定坚持我的原始修复(将 system.web.extensions 部分添加回 web.config)。

于 2010-08-03T01:41:52.740 回答
2

我最近遇到了这个问题,经过一些故障排除后能够解决它。希望我所做的也能帮助解决您的问题。1. 确保您为该站点运行的应用程序池正在使用 .NET 4 管道 2. 在记事本中打开您的 .csproj(或 .vbproj,如果您的项目是 VB 项目)并遍历文件并检查是否有任何硬编码对 v2.0 框架文件的引用。在我的情况下,我们有一个使用 v2.0 编译器路径的“构建后”任务,它强制应用程序仍然使用 2.0 运行时。就像下面一样。

<Target Name=”AfterBuild” Condition=”’$(MvcBuildViews)’==’true’”&gt;
<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)” />

确保将它们更改为 v4.0 或更好地使它们可配置。希望有帮助。

-Vamsi

于 2010-12-31T09:39:49.203 回答
0

还有两点可能有帮助也可能没有帮助的信息。

  1. 与上述sectionGroup和我的机器sectionGroup的唯一区别是这里的version=3.5.0.0和machine.config中的version=4.0.0.0。1.
  2. 事件日志中的错误是“无法加载站点的所有 ISAPI 过滤器...” 是否存在未使用 .net 4 正确注册的 System.Web.Extensions 安装?

我很想对此进行更多测试,但不幸的是,我只在生产系统而不是开发系统中看到了这种行为。

于 2010-10-13T22:50:11.103 回答