サービスインターフェイスに対して次の宣言があります。
[MyCustomContractBehavior]
[ServiceKnownType("GetKnownTypes", typeof(ServiceKnownTypesDiscoveryHelper))]
public interface IMyService
ここで、MyCustomContractBehaviorは次のとおりです。
[AttributeUsage(AttributeTargets.Interface, AllowMultiple = true, Inherited = true)]
public class MyCustomContractBehavior: Attribute, IContractBehavior
次に、最初のインターフェイスを拡張する新しいサービスインターフェイスを作成しました。
public interface ITestService : IMyService
MyCustomContractBehaviorテスト中に、それが機能しないことに気づきました。そのコンストラクターは呼び出されますがApplyClientBehavior、呼び出さApplyDispatchBehaviorれません。
"Inherited = true"さて、プロパティはinterface-> classだけでなく、interface->interface関係でも機能しないと推測しました。に追加MyCustomContractBehaviorするとITestService、問題なく動作し始めました。
しかし、それは私に来ました-ねえ、しかしどうServiceKnownTypeですか?私はそれを追加しませんでしたITestServiceが、それでもITestService契約に合格するためのすべての統合テストです!コメントアウトするServiceKnownTypeとIMyService、テストの多くが失敗するため、明らかにServiceKnownType親インターフェイスから魔法のように「継承」されます。
WCFは、既知の型を検索するときにインターフェイス階層を検査しているようですが、動作を検索するときは同じことをしていません。それは本当ですか、それとも私は何かを誤解していますか?