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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM