2011-04-08 20 views
0

私は、WCF経由で他のアプリケーションからの処理の更新を受け取る監視アプリケーションを持っています。以前は、監視対象のアプリケーションにデータを送信するための1つの「更新」クラスがありました。今、私はここでは例のサブクラスは、私がUpdate由来監視アプリの何かを送ることができるようにしたいと更新を防ぎたい抽象基本クラスとそのサブクラスのWCF DataContract

public class ProcessUpdate : Update 
{ 
    public readonly string ProcessMessage; 

    public ProcessUpdate(string processMessage) : base() 
    { 
     if (string.IsNullOrEmpty(processMessage)) 
     { 
      throw new ArgumentNullException("processMessage"); 
     } 

     ProcessMessage = processMessage; 
    } 
} 

だこの

public abstract class Update 
{ 
    public readonly DateTime TimeStamp; 
    public readonly int  AppId; 

    public Update() 
    { 
     TimeStamp = DateTime.Now; 
     AppId = SomeMethodThatCalculatesId(); 
    } 

    private int SomeMethodThatCalculatesId() 
    { 
     // my calculations ... 
    } 
} 

のように見える抽象基本クラスを書いていますインスタンス化されることから、それが抽象的な理由です。私はAppIdジェネレーションの実装を1つ欲し、派生クラスはそれを気にしたり変更したりしないようにしてください。そのためAppIdは読み込み専用です。

UpdateにはDataContract属性タグが必要ですか、それともサブクラスでのみ必要ですか?その場合、TimeStampAppIdDataMemeberとし、DataContractを付けずに飾ることはできますが、引き続き監視アプリケーションでこれらのプロパティにアクセスできますか?

答えて

1

Iは、WFCに勧告はインターフェイスを介して通信することであると思います。あなたの場合は、TimeStampAppIdのプロパティを(DataContractで修飾して)DataMemberでデコレートすることを意味します。このインターフェイスはUpdateに実装する必要があります。

UpdateがWCFを超えるオブジェクトを表示できるようにしたい場合は、DataContractで飾る必要があります。読み取り専用フィールドを表示するには、飾る必要がありますそれらはDataMemberである。

+0

私がこの権利を得た場合、UpdateとProcessUpdateにはDataContractが必要です。 IUpdateはそのプロパティ上でDataMemberを必要とします。あれは正しいですか? – jlafay

+0

また、DataContractでProcessUpdateをデコレートすることはできますか? – jlafay

0

DataContractとDataMemberとして送信するすべてのメンバーをすべてのクラスにマークする必要があります。 また、NetDataContractシリアライザを使用する必要があります。そうしないと、WCFを介してクラス階層またはインターフェイスを送信できなくなります。 NetDataContractSerializerの使用例について

WCF Net Data Contract Serializer

1

サービスをServiceKnownTypeとマークすると、サブクラスについてクライアントに伝えることができます。サブクラスは、更新から派生したものを送信するときに機能するはずです。

XMLベースのサービスを使用している場合ではなく、クライアントでの更新をアブストラクトとしてマークします。もう一方では、抽象としての更新は表示されません。

+0

抽象クラスでインスタンス化できないため、Updateオブジェクトは一切表示されません。 WCFがオブジェクトをIUpdateとして使用する場合は機能しますか? – jlafay

+0

それは動作しません。 Updateを返すメソッドがある場合、たとえUpdateがabstractであっても、XMLサービスのもう一方の側では、Updateを参照してそのメソッドを作成できるようになります。これらの詳細は、クライアントプロキシが作成されたときにそれらを詳細に示しません。 – Tridus

関連する問題