WCFサービスコントラクトのデータアノテーション
-
03-07-2019 - |
質問
[DataContract]クラスが定義されているWCFサービスがあります。各プロパティには[DataMember]属性があり、いくつかのプロパティにいくつかのデータ注釈属性[Required]および[StringLength]を追加しました。
その後、asp.net MVCアプリケーションでこのサービスをサービス参照として使用します。を使用してすべての属性のリストを取得するとき
var attr= from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
from attribute in prop.Attributes.OfType<ValidationAttribute>()
select attribute;
どのデータ注釈も通っていないようです。これはWCFの制限ですか、それともここで根本的に間違ったことをしていますか?
解決
データコントラクトがネットワーク経由で送信される場合、属性はシリアル化されません。プロパティに関連付けられているメタデータで本質的に作成した新しい属性。したがって、プロパティが属するタイプ。これはデータではないため、使用できません。
asp.net mvcアプリケーションにサービス参照を追加したと思います。これは、指定しない限り、データコントラクトを表す新しいプロキシクラスを作成します。
サービス参照を追加するとき、詳細ボタンをクリックする場合は、「既存のタイプを使用」がチェックされていることを確認してください。これにより、サービスが既存のconractを使用するようになります。
これはベストプラクティスではない場合があります。これは、クライアントアプリケーションが、サービスから返されるタイプに関する知識を持っている必要があるためです。サービスが自分でのみ使用されている場合は問題ないかもしれません。その場合、asp.net mvcアプリケーションに契約への参照を追加する必要があります。
他のヒント
ODataチームは、検証メタデータを「ボキャブラリ」として公開するソリューションで作業しています。