為什麼找不到我的自定義 WCF 行為擴展元素類型?
我有一個包含兩個項目的解決方案。一個項目是 ASP.NET Web 應用程序項目,一個是類庫。Web 應用程序具有對類庫的項目引用。這些都不是強命名的。
在我將稱之為“框架”的類庫中,我有一個端點行為(一個 IEndpointBehavior 實現)和一個配置元素(一個從 BehaviorExtensionsElement 派生的類)。配置元素使我可以通過配置將端點行為附加到服務。
在 Web 應用程序中,我有一個啟用 AJAX 的 WCF 服務。在 web.config 中,我將 AJAX 服務配置為使用我的自定義行為。配置的 system.serviceModel 部分非常標準,如下所示:
<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="MyEndpointBehavior"> <enableWebScript /> <customEndpointBehavior /> </behavior> </endpointBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> <services> <service name="WebSite.AjaxService"> <endpoint address="" behaviorConfiguration="MyEndpointBehavior" binding="webHttpBinding" contract="WebSite.AjaxService" /> </service> </services> <extensions> <behaviorExtensions> <add name="customEndpointBehavior" type="Framework.MyBehaviorExtensionsElement, Framework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </behaviorExtensions> </extensions> </system.serviceModel>在執行時,這可以完美執行。啟用 AJAX 的 WCF 服務正確使用我自定義配置的端點行為。
問題是當我嘗試添加新的 AJAX WCF 服務時。如果我添加 -> 新項目…並選擇“啟用 AJAX 的 WCF 服務”,我可以看到它添加 .svc 文件和程式碼隱藏,但是當它更新 web.config 文件時,我收到此錯誤:
配置文件不是 WCF 服務庫的有效配置文件。
無法載入為擴展“customEndpointBehavior”註冊的類型“Framework.MyBehaviorExtensionsElement、Framework、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null”。
顯然配置是完全有效的,因為它在執行時完美執行。如果我暫時從我的行為配置中刪除該元素,然後添加啟用 AJAX 的 WCF 服務,一切都會順利進行。
不幸的是,在一個更大的項目中,我們將擁有多個具有不同配置的服務,暫時刪除所有自定義行為將很容易出錯。雖然我意識到我可以不使用嚮導並手動完成所有操作,但不是每個人都可以,而且能夠按照它的用途使用該產品會很好 - 嚮導和所有。
為什麼找不到我的自定義 WCF 行為擴展元素類型?
更新/說明:
- 它確實在執行時工作,而不是在設計時工作。
- 當我嘗試添加服務時,框架程序集位於 Web 項目的 bin 文件夾中。
- 雖然我可以手動添加服務(“無需配置”),但我需要開箱即用的項目模板才能工作——這就是問題的全部目標。
- 在 Visual Studio 2008 中可以看到此問題。在 VS 2010 中,此問題似乎已得到解決。
我在 Microsoft Connect 上送出了這個問題,結果你要麼必須將自定義配置元素放在 GAC 中,要麼將其放在 IDE 文件夾中。他們不會修復它,至少現在是這樣。我已經發布了他們提供的解決方法作為這個問題的“答案”。
根據Microsoft 在我為此送出的 Connect 問題上發布的解決方法,這是一個已知問題,至少在目前版本中不會有任何解決方案:
添加新服務項失敗的原因:添加新項和更新配置文件時,系統會嘗試載入配置文件,因此會嘗試在該配置文件中搜尋並載入cusom擴展的程序集。只有在程序集被GACed或與vs exe位於同一路徑(Program Files\Microsoft Visual Studio 9.0\Common7\IDE)的情況下,系統才能找到它。否則,將彈出錯誤對話框,“添加新項目”將失敗。
我理解你的痛點。不幸的是,我們無法在目前版本中進行此更改。我們將在以後的版本中對其進行調查並嘗試提供更好的解決方案,例如提供瀏覽對話框以使客戶能夠指定路徑,或者提供更好的錯誤消息以指示一些解決方案等…
您可以在目前階段嘗試解決方法:GAC 您的自定義擴展程序集或將其複製到“Program Files\Microsoft Visual Studio 9.0\Common7\IDE”嗎?
我們將提供自述文件以幫助可能遇到相同問題的其他客戶。
不幸的是,看來我在這方面不走運。