2009-02-12 5 views
2

comment puis-je exposer l'attribut description des valeurs enum du service au client ou une référence Web en utilisant WCF ouRévéler la DescriptionAttribute de énumérations d'un service WCF

comment puis-je exposer ENUM avec l'attribut description au client en utilisant WCF? tout en exposant l'attribut Description n'est pas exposé uniquement les valeurs enum sont exposées dans le client. Je veux que la valeur dans la description soit attribuée aux énumérations.

Répondre

0

vous pouvez le faire en utilisant la réflexion. retour dans le client une fois que vous avez la valeur Enum .. essayez de choisir l'attribut à l'aide GetField() & GetCustomAttributes()

using System; 
using System.Reflection; 
using System.ComponentModel; 

namespace CustomAttributes 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Colors n1 = Colors.blue; 

      object [] attribues = n1.GetType().GetField(n1.ToString()).GetCustomAttributes(true); 
      Console.WriteLine((attribues[0] as DescriptionAttribute).Description); 
      // WOULD PRINT "DARK BLUE" 
     } 
    } 

    enum Colors 
    { 
     [Description("DARK BLUE")] 
     blue, 
     [Description("PLAIN WHITE")] 
     white 
    } 
} 
+0

Cela ne s'applique pas au proxy WCF généré, car [Description] ne transfère pas –

0

Vérifiez la XmlEnum Attribute. Cela vous permettra de spécifier le "Nom" de l'attribut xml. Par exemple:

public enum MyEnum 
{ 
    [XmlEnum("Coolbox")] 
    Esky, 
    [XmlEnum("Sandles")] 
    Thong, 
    [XmlEnum("MoreLikeGridironThanRealFootball")] 
    Footy, 
} 
1

Vous ne pouvez pas forcer cela - les descripteurs de MEX/WDSL ne contiennent qu'un petit sous-ensemble des informations associées à un type.

Si vous contrôlez le client, une option est de déclarer l'énumération (ou même tous les types) localement, et de consommer à partir de là. Vous devriez pouvoir utiliser le commutateur svcutil/reference: pour utiliser les types d'un assemblage existant (l'EDI offre la même chose). Mais notez que cela brise en partie les règles de la SOA (c'est-à-dire que vous utilisez plus d'informations que les promesses du contrat de service).