【问题标题】:Extension can't be found找不到扩展程序
【发布时间】:2013-08-09 02:33:31
【问题描述】:

我的 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,这不是问题(如果是的话,我猜它也不会在开发环境下运行)。

有什么建议吗?

【问题讨论】:

  • 我在一些情况下看到元素的顺序很重要 - 您可以尝试将 &lt;extensions&gt; 部分移动到 &lt;system.serviceModel&gt; 部分的顶部,看看是否有帮助?
  • 我已经试过了,没有帮助。

标签: .net wcf configuration


【解决方案1】:

好吧,我尝试了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" />

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 2018-03-07
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多