Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF配置错误-未注册扩展名_Wcf_Web Services_Rest - Fatal编程技术网

WCF配置错误-未注册扩展名

WCF配置错误-未注册扩展名,wcf,web-services,rest,Wcf,Web Services,Rest,我正在自我托管一个使用自定义BehaviorExtension的REST服务。将行为扩展添加到ServiceBehaviors时,会出现以下错误: “配置中的元素无效。扩展名“unityServiceBehavior”未在system.serviceModel/extensions/behaviorExtensions的集合中注册。” 我的App.Config如下: <?xml version="1.0"?> <configuration> <system

我正在自我托管一个使用自定义BehaviorExtension的REST服务。将行为扩展添加到ServiceBehaviors时,会出现以下错误:

“配置中的元素无效。扩展名“unityServiceBehavior”未在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>

有什么想法吗

编辑:我在某处读到行为扩展需要注册到配置中才能加载

我是否需要做一些特殊的事情来向配置注册扩展


谢谢。

UnityServiceBehavior类需要从BehaviorExtensionElement派生

我也可以建议您将您的行为名称更改如下:

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

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


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

由于您为元素指定了与类相同的名称(即使是大小写),它也可能会使问题变得模糊


在从BehaviorExtensionElement派生的类中,需要重写CreateBehavior()

UnityServiceBehavior类需要从BehaviorExtensionElement派生

我也可以建议您将您的行为名称更改如下:

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

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


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

由于您为元素指定了与类相同的名称(即使是大小写),它也可能会使问题变得模糊


在从BehaviorExtensionElement派生的类中,您需要重写CreateBehavior()

“配置中的元素无效。扩展名“unityServiceBehavior”未在system.serviceModel/extensions/behaviorExtensions的集合中注册。”

我克服了这个错误,将行为剥离到它的on dll(现在称为My.UnityWCF)中,并在GAC中注册自定义行为。然而,现在我得到了一个新的但类似的错误

未在扩展集合“behaviorExtensions”中注册类型为“My.UnityWCF.UnityServiceBehavior,My.UnityWCF,Version=1.0.0,Culture=neutral,PublicKeyToken=ab794c43d4083d4c”的扩展

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

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

最初,我遇到以下错误:

“配置中的元素无效。扩展名“unityServiceBehavior”未在system.serviceModel/extensions/behaviorExtensions的集合中注册。”

我克服了这个错误,将行为剥离到它的on dll(现在称为My.UnityWCF)中,并在GAC中注册自定义行为。然而,现在我得到了一个新的但类似的错误

未在扩展集合“behaviorExtensions”中注册类型为“My.UnityWCF.UnityServiceBehavior,My.UnityWCF,Version=1.0.0,Culture=neutral,PublicKeyToken=ab794c43d4083d4c”的扩展

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

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

添加上面已经很好的答案:在将其添加到machine.config文件后,我遇到了这个错误

我只是后来在排除故障时才注意到,我的应用程序池的.NET版本与我修改machine.config文件的.NET版本不同。(v2.0与v4.0)

将应用程序池设置为正确的版本为我修复了此错误


非常明显,但对于没有经验的IIS用户(有时像我一样)来说很容易出错。

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

我只是后来在排除故障时才注意到,我的应用程序池的.NET版本与我修改machine.config文件的.NET版本不同。(v2.0与v4.0)

将应用程序池设置为正确的版本为我修复了此错误


很明显,但对于没有经验的IIS用户(有时像我一样)很容易错过。

可能是外壳问题?我看到小写的u。还是会出错。好眼睛,雷内!我会用这个更正来编辑我的文章。也许是一个外壳问题?我看到小写的u。还是会出错。好眼睛,雷内!我将用这个更正来编辑我的帖子。嗨,克里斯,谢谢你的输入。是的,我已经创建了一个从BehaviorExtensionElement继承的类。此外,我同意命名。这只是我帖子上的一个输入错误。无论如何,我通过在GAC中注册该行为,克服了上述错误消息。现在我得到了一个新的但类似的错误。我怀疑这与我的64位机器有关。嗨,克里斯,谢谢你的输入。是的,我已经创建了一个从BehaviorExtensionElement继承的类。此外,我同意命名。这只是我帖子上的一个输入错误。无论如何,我通过在GAC中注册该行为,克服了上述错误消息。现在我得到了一个新的但类似的错误。我怀疑这与我的64位机器有关。