2 つのプロジェクトを含むソリューションがあります。1 つのプロジェクトは ASP.NET Web アプリケーション プロジェクトで、もう 1 つはクラス ライブラリです。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 動作拡張要素の型が見つからないのはなぜですか?
更新/説明:
- 設計時ではなく、実行時に機能します。
- サービスを追加しようとすると、Framework アセンブリが Web プロジェクトの bin フォルダーにあります。
- サービスを手動で (「構成なしで」) 追加することはできますが、すぐに使用できる項目テンプレートが機能する必要があります。それが質問の全体的な目標です。
- この問題は、Visual Studio 2008 で見られます。VS 2010 では、これは解決されているようです。
この問題を Microsoft Connect に提出したところ、カスタム構成要素を GAC に配置するか、IDE フォルダーに配置する必要があることがわかりました。少なくとも今のところ、彼らはそれを修正しません。この質問に対する「回答」として提供された回避策を投稿しました。