2009-08-03 9 views
5

WCFサービスを使用しています.WCFサービスを使用しています.WCFサービスでは、List(IWatchableは作成したカスタムインターフェイスです)を操作契約の1つに戻そうとしています。クライアント上でサービスをテストすると、このメソッドはList<IWatchable>の代わりにobject[]を返します。 IWatchableはWCFとのインターフェイスなので、IWatchableのListを返すことは可能ですか?WCFでリスト<Interface>を渡すにはどうすればよいですか?

方法:

public List<IWatchable> GetWorkload(Guid nodeId, int maximum) 

IWatchable:

public interface IWatchable 
{ 
    string ActionName { get; set; } 
    Guid ActionReference { get; set; } 
} 

うまくいけば、もう少し情報が参考になります...

私は、派生インターフェイスがあります。

public interface IAMRAWatchable: IWatchable 

を3つのコンセプトIAMRAWatchableからTE実装:List<IWatchable>私はクライアントへInstrumentationWatchOutputWatchを送信したいを返す私のWCFの方法で

public class InstrumentationWatch: IAMRAWatchable 
public class OutputWatch: IAMRAWatchable 
etc... 

...このことは可能ですか私はこれについて間違った道を進んでいますか?


は、私は私の解決策を見つけたジョン

感謝を解決しました。 KnownTypeは私が使っていたので動作しませんでしたList<IWatchable> - 私は新しいクラスにリストをラップし、その属性を追加しました。私は私のコードをファクタし直す必要がありますが、ここで興味を持っている人のためのクラスです。

[DataContract] 
[KnownType(typeof(InstrumentationWatch))] 
[KnownType(typeof(OutputWatch))] 
public class WorkInfo 
{ 
    [DataMember] 
    public List<IWatchable> WorkQueue { get; set; } 
} 

は、私のWCF方法:インターフェイスはシリアライズすることはできません

public WorkInfo GetWorkload(Guid nodeId, int maximum) 
+0

どのようにしてクライアントを作成しましたか(scratch/svcutil/Add Service Referenceから) –

+0

私は両方とも同じ結果で試しました – DennyFerra

+0

KnownTypes属性の実装方法を教えてください。 –

答えて

9

。それは行動の記述に過ぎない。

インターフェイスを実装するオブジェクトをシリアル化することはできますが、WCFにそれらの型が何であるかを伝える必要があります。 Data Contract Known Typesを参照してください。

+0

KnownType属性を試しましたが、私はまだ問題を回避できませんでした。おそらく私が提供した追加情報は、私の正確な問題を解決するのに役立つでしょう。ありがとう – DennyFerra

関連する問題