7
votes

Comment exposer des attributs ENum au client WCF

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
}


1 commentaires

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


4 Réponses :


8
votes

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.

Ce que vous devez faire est de vous habiller votre énumé avec un attribut datacontract et les valeurs avec le Enumbembre Attribut afin que vos informations soient sérialisées, mais cela ne vous permettra que de spécifier le sous-jacent Valeur de chaque valeur Enum, pas une description.


1 commentaires

Merci pour votre réponse, y a-t-il de travail pour exposer les attributs?



2
votes

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.

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.

ici est un court public de blog à ce sujet. Je suis sûr qu'il y a d'autres ...


1 commentaires

+1 Exactement - ces attributs sont spécifiques à ces attributs - ceux-ci pas Voyage de serveur au client sur un canal de messagerie WCF.



1
votes

Exemple Enum pour les valeurs d'un feu de circulation ...

[DataContract]
public enum TrafficLightType
{
    [EnumMember]
    Red,

    [EnumMember]
    Green,

    [EnumMember]
    Amber
}


1 commentaires

De Enumember Comment puis-je obtenir la description ou les valeurs?



3
votes

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>


0 commentaires