サービスインターフェイスに対して次の宣言があります。
[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は、既知の型を検索するときにインターフェイス階層を検査しているようですが、動作を検索するときは同じことをしていません。それは本当ですか、それとも私は何かを誤解していますか?