2

サービスインターフェイスに対して次の宣言があります。

[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契約に合格するためのすべての統合テストです!コメントアウトするServiceKnownTypeIMyService、テストの多くが失敗するため、明らかにServiceKnownType親インターフェイスから魔法のように「継承」されます。

WCFは、既知の型を検索するときにインターフェイス階層を検査しているようですが、動作を検索するときは同じことをしていません。それは本当ですか、それとも私は何かを誤解していますか?

4

1 に答える 1

0

ITestServiceマーク[ServiceContract]は? あなたが与えたIMyServiceの定義はそうではありません。インターフェイスをコントラクトとしてマークする (またはコントラクトから継承する) までは、コントラクトの動作は効果がありません。

于 2013-02-16T07:30:51.297 に答える