2011-01-20 8 views
2

私はWCFと私は今日に直面しています挑戦の一つを学んでいます。この設計を実装することです私は私の「欠陥のある」サービスへの参照を作成しようとしています。しかし、結果インジケータに使用される値オブジェクトに読み取り専用フィールドパターンを実装する方法はありますか?WCF、シリアライズ、読み取り専用メンバー

答えて

1

WCFを使用する場合、値オブジェクトはありません。すべてのオブジェクトはシリアル化可能でなければなりません。パラメータのないコンストラクタを持つ必要があります(コメントにマークが付いているため、DataContractSerializerでは不要です)。すべてのシリアル化されたフィールドは書き込み可能でなければなりません。シリアライズ可能でないオブジェクトを送信する場合は、IDataContractSurrogateを実装するか、独自のデータ転送オブジェクト(DTO)を実装するだけです。

+3

を実際に、DataContractSerializerのために、クラスは** **見る....(それが唯一のXmlSerializerのためです)任意のパラメータなしのコンストラクタを必要としない:

は、あなたがやってそれをハック可能性、と述べましたhttp://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontract-serializer-serialization-in-wcf/説明のため –

+0

@marc:ありがとう、私はそれについて知りませんでしたが記事を読むことで意味があります。 –

3

これは、サービスがクラスではなくスキーマと契約を共有するためです。

[DataMember] 
public DefinedResults DRes 
{ 
    get { return this.dres; } 
    private set { /* NOOP */ } 
} 
+0

夜遅くなるので、すでに疲れているかもしれませんが、この解決策のポイントはわかりません。それは巧妙な解決策ですが、これはどのように全体を解決するのに役立ちますか?はい、サーバー側で値オブジェクトを取得しますが、サービス参照としてプロキシを作成すると、public getおよびsetで新しいオブジェクトが生成されます。プロパティが決して設定されないので、クライアント上で同じ型を再利用することはできません。だから私はそれを理解すると、それはサーバー上のバリューオブジェクトのジレンマを解決するが、クライアントはその値を変更することができないか、値を取得できなくなる。 –

関連する問題