Dot-Net

為什麼找不到我的自定義 WCF 行為擴展元素類型?

  • October 3, 2008

我有一個包含兩個項目的解決方案。一個項目是 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”嗎?

我們將提供自述文件以幫助可能遇到相同問題的其他客戶。

不幸的是,看來我在這方面不走運。

引用自:https://stackoverflow.com/questions/169342