2009-05-04 1 views
6

Ich habe einen WCF-Dienst, in dem eine Klasse [DataContract] definiert ist. Jede der Eigenschaften hat das [DataMember] -Attribut und ich habe ein paar Datenanmerkungsattribute [Erforderlich] und [StringLänge] zu einigen der Eigenschaften hinzugefügt.Datenanmerkungen zu WCF-Dienstverträgen

Ich benutze dann diesen Service in einer asp.net MVC-Anwendung als Service-Referenz. Wenn ich eine Liste aller Attribute mit

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

bekomme, sehe ich keine der Daten Anmerkungen kommen durch. Ist das eine Einschränkung der WCF oder mache ich hier etwas grundsätzlich falsch?

Antwort

7

Die Attribute werden nicht serialisiert, wenn Ihr Datenvertrag über die Leitung gesendet wird. Das neue Attribut, das Sie in den Metadaten erstellt haben, die der Eigenschaft und damit dem Typ zugeordnet sind, zu dem die Eigenschaft gehört. Dies sind keine Daten und sind nicht verfügbar.

Ich vermute, dass Sie eine Service-Referenz in Ihrer asp.net mvc-Anwendung hinzugefügt haben, wird dies, sofern nicht angegeben, erstellen neue Proxy-Klassen, die Ihren Datenvertrag darstellen.

Wenn Sie die Service-Referenz hinzufügen, wenn Sie auf die erweiterte Schaltfläche klicken, stellen Sie sicher, dass die Option "Vorhandene Typen verwenden" aktiviert ist. Dies stellt sicher, dass Ihr Service Ihren bestehenden Vertrag nutzt.

Dies ist möglicherweise nicht die beste Vorgehensweise, da die Clientanwendung über den Typ Bescheid wissen muss, den Sie vom Dienst zurückgeben. Dies kann in Ordnung sein, wenn Ihr Dienst nur von Ihnen selbst verwendet wird. In diesem Fall müssen Sie in Ihrer asp.net mvc-Anwendung einen Verweis auf Ihren Vertrag hinzufügen.

+0

Unterm Strich also ist es eine Möglichkeit, die IDE die DataAnnotations kopieren machen können Attribute zu den Consumer-Proxy-Klassen ?? Wenn ja, wie? Ich habe die Option "Vorhandene Typen verwenden" in Ihrem Beitrag nicht gefunden (ich verwende VS10). – Shimmy

3

Das OData-Team arbeitet an einer Lösung, um die Validierungsmetadaten als "Vokabulare" verfügbar zu machen.

Weitere Informationen: http://www.odata.org/blog/vocabularies

+0

Sehr interessant. Hoffentlich können wir weiterhin die standardmäßigen (tragbaren) Datenannotationen und Datenvertragsattribute verwenden, und die Installation wird für uns durch das Framework erledigt. Es gibt bereits zu viele Attribute für den gleichen Typ von Entitätsdeklaration, z. Serializer, XML-Serializer, Datenverträge, Datenanmerkungen, Entity Framework ... !!! –