zoukankan      html  css  js  c++  java
  • 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如下步骤:

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

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

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

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

    用工具生成的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>

     

  • 相关阅读:
    No module named yum错误的解决办法
    Linux下redis的安装
    Linux crontab命令的使用方法
    mysql时间查看以及定时器相关操作
    python zookeeeper 学习和操作
    使用 python 操作 redis
    Linux命令(2)- mv
    mysql 命令行参数
    框架设计
    MediatR使用
  • 原文地址:https://www.cnblogs.com/shenba/p/2306541.html
Copyright © 2011-2022 走看看