无法找到扩展

问题描述:

我的WCF配置在我的开发人员机器上运行得很好。当我尝试将它发布到演示环境(另一台服务器),它会给我以下错误:无法找到扩展

An error occurred creating the configuration section handler for system.serviceModel/behaviors: Extension element 'log4net' cannot be added to this element. Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions.

我的配置,这是在两种情况下是相同的:

<system.serviceModel> 
    <services> 
     <service name="UI.WS.Services.MyService" behaviorConfiguration="ServiceBehavior"> 
      <endpoint address="" binding="wsHttpBinding" 
         contract="UI.WS.Services.IMyService" 
         bindingConfiguration="WsSecurityMode"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
       <serviceMetadata httpGetEnabled="true" /> 
       <!-- Extension --> 
       <log4net /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WsSecurityMode"> 
       <security mode="None" /> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <extensions> 
     <behaviorExtensions> 
      <!-- Extension --> 
      <add name="log4net" type="UI.WS.ErrorHandling.Log4NetBehaviorExtensionElement,UI,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" /> 
     </behaviorExtensions> 
    </extensions> 
</system.serviceModel> 

我已经检查了这个hint,这不是问题(如果是这样的话,我猜也不会在开发环境下运行)。

有什么建议吗?

+0

我已经在少数情况下,元素的顺序是非常重要的看到 - 你可以试试''部分移动的顶部''部分查看是否有帮助? – carlosfigueira

+0

我已经试过了,没有帮助。 – sl3dg3

嗯,我试过typeof(UI.WS.ErrorHandling.Log4NetBehaviorExtensionElement).AssemblyQualifiedName哪给了我UI.WS.ErrorHandling.Log4NetBehaviorExtensionElement, UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null。这现在在两种环境下都可以工作对我来说这是一个奇怪的 - 为什么第一个版本(没有空格)在我的开发者机器上工作?在这两种环境中,应用程序池都在.Net 4.0.3下运行,因此这里没有区别。此外,我还记得模糊地阅读某处,类型声明中的空格应该由于WCF的错误而遗留下来,这似乎并不是这种情况。

无论哪种方式,这个工程现在这样的:

<add name="log4net" type="UI.WS.ErrorHandling.Log4NetBehaviorExtensionElement, UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />