2009-04-01 7 views
1

インタフェースを返す操作規約が必要です。インターフェイスを必要とするWCFサービスに動的に構築されたタイプのインスタンスを返すにはどうすればよいですか?

私の問題は:

1)私は、サービスを動的に返される、またはWCFが型を受け入れる持つことが知られているタイプを登録します。属性でマークされた既知の型またはサービスの静的メソッドでない限り、メソッドは失敗します。

2)私はクライアント側で、メッセージからインターフェイスの動的なインプリメンテータを構築できるようにしたいと思います。

私はメッセージを混乱させたくありません。私は、実装の詳細を隠しておきたいだけです。

+0

実装の詳細を処理する必要があるコードから隠すことはできません。シリアライザは実装をシリアライズする必要があるため、シリアライザはそのことを知る必要があります。 –

+0

@リヴ:あなたの投稿を編集してタイトルを修正しました(あなたの質問ではありませんでした)、hi/thanks fluffを削除しました(これを避けるために使用しています)。 – Brann

答えて

1

私はあなたがを持っていると思うので、[KnownType]属性を使うように設計されているので、シリアライザはどの実装が待機するかを知っています。

重要な点は、シリアライザは、読み込み方法(主に型の名前)に関するメタデータがほとんどないバイトをいくつか受け取ることです。そのため、それらのバイトがどのタイプを表すのかを知り、このタイプを「知る」必要があります。 この情報がなければ、シリアライザは、インターフェイス機能を実装するいくつかのフィールドをどこから見つけるかはわかりません。

しかし、あなたはあなたがのDataContractのために知られているタイプを返すメソッドを実装することができ、そのトピックに直接情報のDataContractSerializer

プレンティを使用して(すなわち動的に)実行時にhere

0

を新しいKnownTypesを追加することができますKnownTypeAttributeの特定のオーバーロードを使用して、既知の型を配列として返すメソッドの名前を指定します。このメソッドは、実行時にのみ認識される型を返すことができます。

[DataContract] 
[KnownType("GetKnownTypes")] 
public class MyDataContract 
{ 
    public int X { get; set; } 

    public static Type[] GetKnownTypes() 
    { 
     return new Type[] { typeof(Class1), typeof(Class2) }; 
    } 
} 
関連する問題