'System.Web.Extensions'在IIS7上部署.Net Framework 4网站时遇到问题

时间:2010-03-23 07:19:27

标签: asp.net .net iis iis-7 .net-4.0

我正在尝试在IIS7服务器上部署.Net framework 4网站。我已经将应用程序池的目标框架更改为.Net 4,但应用程序仍然向我显示错误:

“无法读取配置部分'system.web.extensions',因为它缺少部分声明”

我猜这与.Net4的新功能有关,它让我有一个紧凑的Web配置文件。我认为由于某些原因,IIS7对此并不满意。

如何成功部署此应用程序,还是必须缩减到v3.5?我相信那里有一个解决方案。

你有什么建议吗?

7 个答案:

答案 0 :(得分:30)

如果您在IIS 7(.5)中创建新网站,也可能会出现同样的错误,因为它为新网站创建的应用程序池可能仍设置为2.0,因此system.web.extensions在2.0配置文件中无效。

只需进入IIS管理器,选择应用程序池,为您的应用程序选择一个,右键单击,高级设置,并将.NET框架版本设置为v4。

答案 1 :(得分:10)

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部分组
  3. ...

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

答案 2 :(得分:4)

我可以在一些狩猎后自己解决这个问题(发生!)。

显然与配置文件的结构方式无关,它是ASP.Net Ajax的程序集,它没有部署在我的目标服务器上,但可能存在于我的开发机器上。

我从web.config文件中删除了该条目,此问题已解决,还有其他一些小问题,但没有什么值得一提的。

IIS7 + .Net Framework 4的部署体验并不太难,增加的功能将是值得的。

答案 3 :(得分:3)

如果"aspnet_regiis.exe -iru"没有帮助,并且您确定尝试在.NET 4.0应用程序池下启动站点,则可能是IIS 7.0配置继承中的问题。 Web服务器读取.NET 2.0的machine.config。 应用修补程序KB958854将解决配置继承的问题。我已成功解决了这个问题。

答案 4 :(得分:3)

我从Leo Tang post找到答案:

  

此问题不是由web.config迁移引起的。如果您将应用程序更新为.Net Framework4.0,但将此应用程序分配给在.Net Framework3.5或以前版本下运行的应用程序池,则会遇到此错误。   您可以将此应用程序分配给IIS中的.Net Framework4.0应用程序池以解决问题。

因此,如果您读取错误配置部分'system.web.extensions'无法读取,因为它缺少部分声明,因为您部署的应用程序正在应用程序池下运行配置为在.NET 2.0或3.5下运行(DefaultAppPool?DefaultAppPool默认设置为.NET 2.0)。

执行以下步骤:

  1. 运行 IIS (exec 'inetmgr'
  2. 从左侧面板的树中选择您的应用(可能是'Server \ Sites \ Default网站\您的应用名称'
  3. 打开您的应用设置(点击'基本设置''操作'右侧面板)并查看< strong>应用程序池。

  4. 现在选择最适合您需求的操作:

    • 您可以更改应用程序的应用程序池(按钮'Application Edit'表单中选择,然后选择'ASP .NET v4-0 Classic')。 此更改将仅影响此应用
    • 或者您可以编辑应用程序池(可能是 Server \ Application pools \ DefaultAppPool rom左侧的树)并将其设置为在.NET Framevork v4下运行。 0。注意:此更改将影响此应用程序池下的每个应用程序 ...这是您想要的吗?也许...

答案 5 :(得分:2)

这是因为您已将应用程序部署到IIS服务器上,其中应用程序的AppPool设置为在DefaultAppPool下运行。 DefaultAppPool自动配置为在.NET 2.0而不是.NET 4.0下运行。这意味着System.Web.Extensions的内容对于该版本的.NET Framework不可用。

更改Web应用程序的应用程序池(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

重新运行您的应用程序,它应该可以工作。

检查this link是否有图形演示。

答案 6 :(得分:1)

我按照以下步骤解决了这个问题: 1.将应用程序池框架设置为4.0
2。如果第1点不起作用,则问题可能与配置继承有关。 从http://support.microsoft.com/kb/958854

应用修补程序

这应该可以解决问题。