Je veux exposer des attributs Enum à l'application client WCF, mais je ne peux voir que des valeurs d'énum.
Voici l'ENUM: P>
public enum TemplateType { [EnumDescription("Property Particulars")] [EnumValue("PropertyParticulars")] PropertyParticulars = 1, [EnumDescription("Short Format Lists")] [EnumValue("ShortFormatLists")] ShortFormatLists, [EnumDescription("Client Letters")] [EnumValue("ClientLetters")] ClientLetters, [EnumDescription("Labels")] [EnumValue("Labels")] Labels }
4 Réponses :
Vous pouvez exposer les énums à partir d'un service, mais les attributs d'une énumération ne sont pas sérialisés lorsqu'ils sont envoyés sur le fil. Cela signifie que les consommateurs de cet énumé ne verront que l'énum lui-même et aucun de vos attributs. P>
Ce que vous devez faire est de vous habiller votre énumé avec un attribut code> datacontract code> et les valeurs avec le Enumbembre code>
Attribut afin que vos informations soient sérialisées, mais cela ne vous permettra que de spécifier le sous-jacent Valeur em> de chaque valeur Enum, pas une description. P>
Merci pour votre réponse, y a-t-il de travail pour exposer les attributs?
Je ne suis pas entièrement versé dans les spécifications, mais je doute que ce type de métadonnées ait une représentation équivalente à WSDL. Ainsi, cela ne sera pas visible du côté du client si vous générez les types de votre proxy. P>
Toutefois, si vous mettez tous vos données de données dans un assemblage distinct que vous référence dans le client, vous pouvez réutiliser ces types du côté client. Dans ce cas, les attributs seraient visibles. "Types de réutilisation dans les assemblages référencés" doit être vérifié pour votre référence de service, mais ceci est sur défaut. P>
ici est un court public de blog à ce sujet. Je suis sûr qu'il y a d'autres ... p>
+1 Exactement - ces attributs sont spécifiques à ces attributs - ceux-ci pas b> Voyage de serveur au client sur un canal de messagerie WCF.
Exemple Enum pour les valeurs d'un feu de circulation ...
[DataContract] public enum TrafficLightType { [EnumMember] Red, [EnumMember] Green, [EnumMember] Amber }
De Enumember Comment puis-je obtenir la description ou les valeurs?
Il existe une solution de contournement si l'intention est d'exposer un texte d'affichage pour les membres ENum, définissez votre énumé de cette manière dans les contrats:
<xs:simpleType name="EPaymentCycle"> <xs:restriction base="xs:string"> <xs:enumeration value="Month by Month" /> <xs:enumeration value="Week by Week" /> <xs:enumeration value="Hour by Hour" /> </xs:restriction>
N'exposez pas l'énumé dans la réponse de la WCF en raison de raisons de compatibilité en arrière. Voir Stackoverflow.com/a/788281/52277