WCF配置错误-未注册扩展名
我正在自我托管一个使用自定义BehaviorExtension的REST服务。将行为扩展添加到ServiceBehaviors时,会出现以下错误: “配置中的元素无效。扩展名“unityServiceBehavior”未在system.serviceModel/extensions/behaviorExtensions的集合中注册。” 我的App.Config如下: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
<?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位机器有关。