Как отправить коллекцию перечислений в службу WCF - PullRequest
3 голосов
/ 13 января 2009

У меня проблемы с отправкой коллекции Enums методу службы WCF. Я использовал этот пост в качестве руководства: Совместное использование Enum с WCF Service

[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 и ServiceMethod3 работают правильно. Я получаю следующую ошибку при попытке отправить список Enums в 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'.

Нужно ли создавать собственный QueryStringConverter?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 января 2009

Как выглядит ваш файл конфигурации? Похоже, вы используете элемент webHttpBinding, который не поддерживает IList<MyEnum>, поскольку это невозможно представить в URL.

Вы должны использовать basicHttpBinding, так как он использует SOAP. Использование SOAP позволит вам сериализовать IList<MyEnum> и отправить его на ваш OperationContract.

0 голосов
/ 14 января 2009

Было бы приемлемо ввести этот параметр вместо массива MyEnum? Тогда внутри вашей реализации просто используйте var eList = new List (e); В качестве альтернативы вы можете попробовать использовать вспомогательный класс KnownType, как показано здесь: http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...