2012-08-23 23 views
1

我自己托管使用自定义BehaviorExtension的REST服务。当我的行为扩展添加到ServiceBehaviors我得到以下错误:WCF配置错误 - 扩展名未注册

"Invalid element in configuration. The extension name 'unityServiceBehavior' is not registered in the collection at system.serviceModel/extensions/behaviorExtensions."

我App.Config中低于:

<?xml version="1.0"?> 
<configuration> 

    <system.serviceModel> 

     <services> 
      <service behaviorConfiguration="MyServiceTypeBehaviors"  name="My.Core.Services.PartyService"> 
       <endpoint behaviorConfiguration="RESTBehavior" binding="webHttpBinding" name="PartyService" contract="My.Core.Services.IPartyService" /> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
       <host> 
        <baseAddresses> 
         <add baseAddress="http://localhost:8080/parties" /> 
        </baseAddresses> 
       </host> 
      </service> 
     </services> 

     <behaviors> 
      <serviceBehaviors> 
       <behavior name="MyServiceTypeBehaviors" > 
        <serviceMetadata httpGetEnabled="true" /> 

        <!--Adding this behavior causes the error />--> 
        <UnityServiceBehavior /> 
       </behavior> 
      </serviceBehaviors> 

      <endpointBehaviors> 
       <behavior name="RESTBehavior"> 
        <webHttp helpEnabled="true" /> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 

     <extensions> 
      <behaviorExtensions> 
       <add name="UnityServiceBehavior" type="My.Core.Services.UnityServiceBehavior,  My.Core.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
      </behaviorExtensions> 
     </extensions> 

    </system.serviceModel> 


    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration> 

上任何想法?

编辑:我在某处读到行为扩展需要注册的配置,以便它被加载。

有什么特别的,我需要做的注册扩展的配置?

谢谢。

+0

套管问题可能? rene

+0

我看到小写的u。仍然收到错误。好眼睛rene!我将使用此更正编辑我的帖子。 –

回答

0

UnityServiceBehavior类需要从BehaviorExtensionElement派生。

我可以建议过你改变你的行为的名称如下:

​​

为你提供了元素的名称相同的类(甚至区分明智)也可能模糊焦点...

在你BehaviorExtensionElement得到你需要重写CreateBehavior类()

+0

嗨克里斯,感谢您的意见。是的,我已经创建了一个继承自BehaviorExtensionElement的类。另外,我同意命名。这只是我的帖子上的一个错字。无论如何,通过在GAC中注册行为,我已经超过了上述错误消息。现在我得到一个新的但类似的错误。我怀疑它与我的64位机器有关。 –

0

本来我是收到以下错误:

"Invalid element in configuration. The extension name 'unityServiceBehavior' is not registered in the collection at system.serviceModel/extensions/behaviorExtensions."

我通过在dll(现在称为My.UnityWCF)中删除行为并将自定义行为注册到GAC中来解决此错误。但是,现在我得到一个新的但类似的错误。

The extension of type 'My.UnityWCF.UnityServiceBehavior, My.UnityWCF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ab794c43d4083d4c' is not registered in the extension collection 'behaviorExtensions'.

我使用WCF配置编辑器将行为添加到behaviorExtensions集合。

<behaviorExtensions> 
    <add name="unityWCF" type="My.UnityWCF.UnityServiceBehavior, My.unityWCF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</behaviorExtensions> 
1

要添加上面已经很好的答案:我将此错误添加到machine.config文件后遇到此错误。

我以后才注意到,虽然我的应用程序池的.NET版本与我修改machine.config文件的.NET版本不一样,但遇到问题。 (v2.0 vs v4.0)。

将应用程序池设置为正确的版本为我解决了这个错误。

很明显,但很容易错过与IIS的无经验的人(有时像我一样)。