我正在向我的WCF服务添加一个自定义端点行为,并使用从BehaviorExtensionElement扩展的类来初始化它.在我的web.config中,我添加以下内容来注册行为扩展:
<system.serviceModel> <services> <service name="Service.MyService"> <endpoint address="" behaviorConfiguration="endpointBehavior" binding="basicHttpBinding" contract="Contracts.IMyService"/> </service> </services> <behaviors> <endpointBehaviors> <behavior name="endpointBehavior"> <logBehavior /> </behavior> </endpointBehaviors> </behaviors> <extensions> <behaviorExtensions> <add name="logBehavior" type="MyNamespace.MyBehaviorExtensionElement,MyAssembly,Version=0.0.0.1,Culture=neutral,PublicKeyToken=null" /> </behaviorExtensions> </extensions> </system.serviceModel>
这工作绝对正常,但我必须指定程序集的版本才能加载它.如果我将程序集引用更改为仅MyNamespace.MyBehaviorExtensionElement,MyAssembly没有版本/ culture / token,则服务无法启动并显示错误:
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: An error occurred creating the configuration section handler for system.serviceModel/behaviors: Extension element ‘logBehavior’ cannot be added to this element. Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions.
Parameter name: element
作为构建过程的一部分,我的程序集版本的最后部分将经常更改.如何每次构建版本增加(可能是数百次)时,我如何避免使用新版本号继续更新web.config?
解决方法
我认为在.net 4或更高版本中删除了对完全指定的类名的限制.你有没有尝试过:
<behaviorExtensions> <add name="logBehavior" type="MyNamespace.MyBehaviorExtensionElement,MyAssembly" /> </behaviorExtensions>
我可能错了!