WCF中使用自定义behavior提示错误的解决方法

WCF中支持自定义behavior,可通过配置的方式给endpoint或者service设置behavior。配置方法就是在system.serviceModel/extensions/behaviorExtensions节点下注册自定义的behavior,之后就可以在behaviors节点中使用。注册的配置如下

注册自定义Behavior
1 <extensions>
2           <behaviorExtensions>
3               <add name= " validation "
4                type= " Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationElement,
5                   Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF,
6                  Version= 4.1. 0.0, Culture=neutral, 
7                  PublicKeyToken=31bf3856ad364e35 "  />
8            </behaviorExtensions>
9       </extensions>

这里用的是企业库中用于支持WCF验证的behavior扩展。

按照enterpise library 4.1版本中的帮助文档描述是这样配置的,但是运行时却出现以下错误:

参数名: element (E:\aspnet\WcfService\TestParameterValidate\bin\Debug\TestParameterValidate.dll.config line 34) ---> System.ArgumentException: 无法将扩展元素“validation”添加到此元素中。请验证该扩展是否已在 system.serviceModel/extensions/behaviorExtensions 中的扩展集合中注册。

出现这种错误的只可能是拼写错误了,但那段配置可是从企业库的帮助文档中拷贝的,难道WCF不认企业库的dll,那可都是一家的产品。回想起之前写过一个自定义的behavior,也有这个问题,那么确定不是企业库的问题,问题还是在于WCF的配置。

经过搜索,在园子里的一篇文章提到了这个问题(http://www.cnblogs.com/hxw/archive/2009/09/17/1331641.html),说这是WCF的bug,配置中对于type的字符串必须严格按照规范来写,而且不能有换行等。照着这个思路,把type工工整整地写了一遍,还是报同样的错误,真让人崩溃。

这时想到了用WCF的配置工具,这个工具是.NET提供的,专门用于配置config中的WCF配置内容。调出的方法是对着配置文件,点击右键,然后选择"编辑WCF配置"。打开之后,所有内容都在掌控之中了。

配置extensions如下步骤:

第一步选择行为元素扩展:

WCF中使用自定义behavior提示错误的解决方法

第二步点击右下方的"新建"按钮,在弹出的界面中选择自定义的类型

WCF中使用自定义behavior提示错误的解决方法

点击确定之后,保存即可。

经过配置之后,工具生成的配置代码如下,咋一看没什么区别,但重要的是,能运行起来而且不会报错。

用工具生成的extensions
1 <behaviorExtensions>
2         <add name= " validation " type= " Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationElement, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 " />
3       </behaviorExtensions>

 

你可能感兴趣的:(WCF)