WCF中使用自定义behavior提示错误的解决方法
WCF中支持自定义behavior,可通过配置的方式给endpoint或者service设置behavior。配置方法就是在system.serviceModel/extensions/behaviorExtensions节点下注册自定义的behavior,之后就可以在behaviors节点中使用。注册的配置如下
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如下步骤:
第一步选择行为元素扩展:
第二步点击右下方的"新建"按钮,在弹出的界面中选择自定义的类型
点击确定之后,保存即可。
经过配置之后,工具生成的配置代码如下,咋一看没什么区别,但重要的是,能运行起来而且不会报错。
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>