J'ai un service WCF hébergé pour des clients internes - nous avons le contrôle de tous les clients. Nous allons donc utiliser une bibliothèque de contrats de données pour annuler le besoin de génération de proxy. Je voudrais utiliser des propriétés readonly et avoir des contrats de données sans constructeurs par défaut. Merci pour votre aide ...WCF DataContracts
12
A
Répondre
24
Les propriétés en lecture seule sont correctes tant que vous marquez le champ (non-readonly) en tant que [DataMember], pas la propriété. Contrairement à XmlSerializer, IIRC DataContractSerializer n'utilise pas le ctor par défaut - il utilise un mécanisme de réflexion séparé pour créer des instances non initialisées. Sauf sur le "Olive" (port WCF) du mono, où utilise utilise le ctor par défaut (à ce moment, ou à un moment donné dans le passé récent).
Exemple:
using System;
using System.IO;
using System.Runtime.Serialization;
[DataContract]
class Foo
{
[DataMember(Name="Bar")]
private string bar;
public string Bar { get { return bar; } }
public Foo(string bar) { this.bar = bar; }
}
static class Program
{
static void Main()
{
DataContractSerializer dcs = new DataContractSerializer(typeof(Foo));
MemoryStream ms = new MemoryStream();
Foo orig = new Foo("abc");
dcs.WriteObject(ms, orig);
ms.Position = 0;
Foo clone = (Foo)dcs.ReadObject(ms);
Console.WriteLine(clone.Bar);
}
}
Questions connexes
- 1. Passage d'attributs sur DataContracts dans WCF
- 2. Équivalent XmlTextAttribute dans DataContracts
- 3. Exposer des objets (DataContracts) qui ne peuvent pas être directement utilisés par un service WCF?
- 4. Les DataContracts de WCF doivent-ils être des types de valeur ou de référence?
- 5. WCF Service vs Silverlight prêt WCF
- 6. Service WCF RESTful sur Service WCF standard
- 7. WCF Layers
- 8. Authentification WCF
- 9. WCF InstanceContextMode
- 10. WCF OperationContext
- 11. Usurpation WCF
- 12. WCF DataContract
- 13. WCF DataContract
- 14. WCF System.ServiceModel.Security.SecurityNegotiationException
- 15. Liaisons WCF
- 16. WCF Globalization
- 17. WCF Message.IsFault
- 18. WCF ErrorHandler
- 19. Authentification WCF
- 20. WCF Passthrough
- 21. WCF SecurityException
- 22. WCF Architecture
- 23. WCF - NullReferenceException sur l'appel WCF le plus élémentaire
- 24. WCF: comment ajouter un ServiceThrottlingBehavior à un service WCF?
- 25. Comment implémenter un service wcf pouvant héberger d'autres services wcf?
- 26. wcf Extrait wsdl du service WCF avec WSDL aplati
- 27. configurer Programatically opérations individuelles WCF avec différentes configurations WCF
- 28. Sécurité WCF nommée WCF et plusieurs sessions utilisateur?
- 29. Référence Web dans WCF
- 30. Instanciation du client WCF
Ok, cela fait sens. Je n'ai trouvé aucune documentation à ce sujet et je pensais avoir lu qu'un constructeur par défaut était nécessaire. Cela fonctionne très bien! Merci ... –
c'est bien si vous avez une propriété de sauvegarde simple mais si la propriété readonly est quelque chose comme chaîne publique FooBar {get {return Foo + '' + Bar; }} comment le sérialiseur datacontract gère-t-il cette situation? – lomaxx
@lomaxx, eh bien, à moins que vous ne le marquiez '[DataMember]', il ne fera rien; mais c'est une propriété en lecture seule, donc je m'attends à ce que cela vous ignore ou lance une exception. Si vous avez un getter et un setter, il fera tout ce que votre code lui demande de faire. –