“system.servicemodel”配置部分无法读取,因为缺少部分声明。

33

我遇到了一些问题。 我的旧网络服务器(Windows 2003)已被替换为2008 R2。我在其中拥有管理员帐户,并可以自由操作,但我并不是专业领域的专家。 我配置了角色以进行应用程序开发和Web服务器(iis7)。

然而,我的网站运行的是.NET4,而该角色仅安装了3.5。 因此,我尝试手动在服务器上安装.NET4。 我的问题是,在我的web.config中的System.ServiceModel部分,我的网站无法正常工作。 我已经确保它在.NET4应用程序池中运行。

我猜这是一个WCF问题,但我不知道如何解决它。我已经尝试了在Google上找到的所有方法,包括aspnet_regis、ServiceModelReg.exe等。 我甚至尝试重新安装Web服务器角色,但每次尝试进入站点设置时,仍然会出现此错误。

我希望这里有一些专家,知道如何解决这个问题。


4
你确定你正在使用正确版本的框架(4.0)运行AppPool吗?我找到了一个描述这个问题的链接:http://blog.benday.com/archive/2010/05/19/23278.aspx。 - Ozzy
这个对我解决了问题。 - WhiteKnight
顺便说一句:最近我也遇到了同样的问题,通过重新“发布”应用程序并重启应用程序池来解决了它。希望这能帮助到某些人! :) - tklives
9个回答

32

16
谢谢您的提示。对于我们的情况,是由一个应用程序池使用了 .Net 2.0 而不是 4.0 导致的。 - Hong

27

进入IIS中的应用程序池,选择“设置应用程序池默认值”[位于右上角],并检查.NET Framework的版本。

注意:默认情况下将选择.NET 4.0版本。


这个答案让我找到了正确的方向。在把应用程序池的.NET Framework版本从v2.0切换到v4.0后,错误消失了。 - Mitch Stewart

7
显然,IIS7需要一个System.WebServer部分,即使它是空的。将以下内容添加到我的web.config文件中解决了我的问题。
  <system.webServer>
  </system.webServer>

7

我遇到这个错误的原因与其他人不同。

这是在将MVC项目从.Net 4.0迁移到4.5时发生的,其中Microsoft.IdentityModel库被替换为System.identityModel。在我的情况下,我已经完成了所有必要的Web.Config迁移步骤(在此处列出),但忘记更改configSections部分中的部分名称:

<configSections>
 <section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>

这里所述,该部分的定义应为:

<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

3
对我来说问题在于 WCF 服务没有安装。安装后,问题得到解决:IS7: WCF Services - .SVC do not work
请注意,将应用程序池的 .NET 版本从 2.0 更改为 4.0 对我来说不是一个选项,因为该站点需要运行在 2.0 上。

1

0
对于我而言,不想安装 .NET Framework 3.5 的解决方案是将 machine.config 中的 system.serviceModel 部分转录到我的 web.config 文件中:
<configuration>
  <configSections>
    <sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <section name="behaviors" type="System.ServiceModel.Configuration.BehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="bindings" type="System.ServiceModel.Configuration.BindingsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="client" type="System.ServiceModel.Configuration.ClientSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="comContracts" type="System.ServiceModel.Configuration.ComContractsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="commonBehaviors" type="System.ServiceModel.Configuration.CommonBehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly"/>
        <section name="diagnostics" type="System.ServiceModel.Configuration.DiagnosticSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="machineSettings" type="System.ServiceModel.Configuration.MachineSettingsSection, SMDiagnostics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly"/>
        <section name="protocolMapping" type="System.ServiceModel.Configuration.ProtocolMappingSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="serviceHostingEnvironment" type="System.ServiceModel.Configuration.ServiceHostingEnvironmentSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowDefinition="MachineToApplication"/>
        <section name="services" type="System.ServiceModel.Configuration.ServicesSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="standardEndpoints" type="System.ServiceModel.Configuration.StandardEndpointsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <section name="routing" type="System.ServiceModel.Routing.Configuration.RoutingSection, System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <section name="tracking" type="System.ServiceModel.Activities.Tracking.Configuration.TrackingSection, System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </sectionGroup>
  </configSections>
  <system.serviceModel>
    <!-- ... -->
  </system.serviceModel>
</configuration>

0

我曾经遇到过同样的问题...我用以下方法简单地解决了它:

aspnet_regiis.exe -i

0

我曾经遇到过同样的问题,我通过命令提示符解决了它。 以管理员身份运行, 进入文件夹\Windows\Microsoft.Net\Framework\V3.0(在这种情况下是3.0,但在另一台PC上可能是另一个版本的.net Framework)\Windows Communication Foundation

执行以下命令:

ServiceModelReg.exe -i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接