En passant sur les attributs DataContracts dans WCF
-
18-09-2019 - |
Question
J'ai un DataContract qui a des attributs importants sur. Par exemple, dans le code suivant:
[DataMember]
[Description("My Description")]
public string Name { get; set; }
Je veux l'attribut Description à généré automatiquement sur le proxy client.
Y at-il une solution ou des solutions de contournement en plus double emploi massif?
Merci!
La solution
Vous n'avez pas, pas vraiment. Rappelez-vous que vous n'êtes pas passer des instances d'objets, mais plutôt textuel des messages.
S'il est vraiment important, alors vous pouvez abandonner les classes proxy générées et partager la mise en œuvre des objets de données et des contrats à la place, mais cela est un tas plus de travail et bien sûr, vous êtes courir le risque du client et le serveur soit hors de la synchronisation.
Si vous voulez essayer ensuite mettre vos contrats et de l'interface d'opération dans un ensemble séparé, avec des modificateurs publics, essayez ce qui suit
Binding binding = new BasicHttpBinding(); // or which one you
EndpointAddress endpoint =
new EndpointAddress("endpointUrl");
ChannelFactory<IServiceInterface> channelFactory =
new ChannelFactory<IServiceInterface>(binding, endpoint);
IServiceInterface client = channelFactory.CreateChannel();
MyDataType result = client.Operation(myOtherDataType);
((IClientChannel)client).Close();
Autres conseils
Vous auriez probablement creuser assez profondément dans la création de la description du service (et le fichier WSDL résultant) afin de passer ces attributs dans une telle forme que le client puisse détecter et de les recréer. A côté impossible, vraiment.
Plus: rappelez-vous que WCF est conçu pour être interopérable - ce qui devrait Java ou PHP client faire avec ces attributs, vraiment?
programmation orientée services est tout à fait une bête différente des systèmes à base d'objet « régulier » ou component. Tout ce que vous faites est de passer essentiellement autour des messages au format texte ou binaire. Cela ne limite certaines choses que vous pourriez être habitué à traiter avec des objets en .NET et des composants - il fonctionne différemment dans le monde SOA.
Marc