6

[DataContract]クラスが定義されているWCFサービスがあります。各プロパティには[DataMember]属性があり、いくつかのプロパティにいくつかのデータ注釈属性[Required]と[StringLength]を追加しました。

次に、このサービスをasp.netMVCアプリケーションでサービス参照として使用します。を使用してすべての属性のリストを取得するとき

var attr= from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
                        from attribute in prop.Attributes.OfType<ValidationAttribute>()
                        select attribute;

データ注釈がまったく通っていないようです。これはWCFの制限ですか、それともここで根本的に間違ったことをしていますか?

4

2 に答える 2

7

データ コントラクトがネットワーク経由で送信されるとき、属性はシリアル化されません。プロパティに関連付けられている本質的にメタデータで作成した新しい属性、したがってプロパティが属するタイプ。これはデータではなく、利用できません。

asp.net mvc アプリケーションにサービス参照を追加したと思います。これにより、指定しない限り、データ コントラクトを表す新しいプロキシ クラスが作成されます。

サービス参照を追加するときに詳細ボタンをクリックする場合は、[既存の型を使用する] がオンになっていることを確認してください。これにより、サービスが既存のコントラクトを使用することが保証されます。

クライアント アプリケーションは、サービスから返される Type に関する知識を持っている必要があるため、これはベスト プラクティスではない場合があります。サービスが自分だけで使用されている場合は、これで問題ない可能性があります。その場合、asp.net mvc アプリケーションでコントラクトへの参照を追加する必要があります。

于 2009-05-04T22:33:02.237 に答える