2009-01-13 7 views
3

Je rencontre des problèmes pour envoyer une collection d'énumérations à une méthode de service WCF. J'ai utilisé ce poste comme guide: Sharing Enum with WCF ServiceComment envoyer une collection d'énumérations à un service WCF

[ServiceContract] 
[ServiceKnownType(typeof(MyEnum))] 
[ServiceKnownType(typeof(List<MyEnum>))] 
public interface IMyService{  
    [OperationContract]  
    MyEnum ServiceMethod1(); 

    [OperationContract]  
    IList<MyEnum> ServiceMethod2(); 

    [OperationContract]  
    IList<MyEnum> ServiceMethod3(MyEnum e); 

    [OperationContract]  
    IList<MyEnum> ServiceMethod4(IList<MyEnum> e); 
} 

[Serializable] 
[DataContract] 
public enum MyEnum{ 
    [EnumMember] red, 
    [EnumMember] green, 
    [EnumMember] blue 
}; 

ServiceMethod1, ServiceMethod2 et ServiceMethod3 fonctionnent correctement. Je reçois l'erreur suivante lors de la tentative d'envoi d'une liste d'énumérations à ServiceMethod4.

Operation 'ServiceMethod4' in contract 'IMyService' has a query variable named 'e' of type 'System.Collections.Generic.IList`1[MyEnum]', but type 'System.Collections.Generic.IList`1[MyEnum]' is not convertible by 'QueryStringConverter'. Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'. 

Dois-je créer un QueryStringConverter personnalisé?

Merci!

Répondre

3

À quoi ressemble votre fichier de configuration? Il semble que vous utilisiez un élément webHttpBinding qui ne prendrait pas en charge IList<MyEnum> car il serait impossible de le représenter sur une URL.

Vous devriez envisager d'utiliser un basicHttpBinding car il utilise SOAP. L'utilisation de SOAP vous permettra de sérialiser IList<MyEnum> et de l'envoyer à votre OperationContract.

+0

J'utilise un élément 'webHttpBinding' et appeler mon service avec une simple requête Get passer les params sur la chaîne de requête. http: //serveur/MyService.svc/ServiceMethod4? E = 0 & e = 1 & e = 2 Pourquoi 'webHttpBinding' ne sérialise-t-il pas une liste d'énumérations? 'webHttpBinding' sérialisera une liste d'objets. –

0

Serait-il acceptable de taper ce paramètre en tant que tableau de MyEnum à la place? Ensuite, dans votre implémentation, utilisez simplement var eList = new List (e); Sinon, vous pouvez essayer d'utiliser une classe d'aide de KnownType, comme indiqué ici: http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

+0

J'ai précédemment essayé de changer le type du paramètre en un tableau de MyEnums mais le paramètre ne se sérialise toujours pas. J'utilise également l'attribut ServiceKnownType comme indiqué dans l'exemple ci-dessus mais cela n'aide pas la situation non plus. –

Questions connexes