Flex, веб-сервис .NET и числовые перечисления - PullRequest
0 голосов
/ 04 февраля 2009

Мы используем Flex 3 для использования веб-службы .NET. Веб-сервис использует enum, и мы используем Flex Builder для автоматической генерации объектов веб-сервиса. Вот определение перечисления веб-службы .NET:

 /// <summary>
   /// User type
   /// </summary>
   public enum UserTypeEnum
   {
       Admin = 1,
       User = 3,
       Manager = 4
   }

Когда Flex генерирует объекты веб-службы, он обрабатывает их как строки вместо целочисленных значений.

[Inspectable(category="Generated values", enumeration="Admin, User, Manager", type="String")]
public var _UserTypeEnum:String;public function toString():String
{
return _UserTypeEnum.toString();
}

Когда мы получаем данные из веб-службы, любое свойство, использующее это перечисление, имеет значение Null вместо 'admin' или '1'. Есть ли способ заставить эту работу?

Ответы [ 3 ]

1 голос
/ 04 февраля 2009

Имейте в виду, что существуют проблемы с перечислениями и веб-службами.

См. вопрос .

  • Следует использовать [Serializable, Flags] в веб-сервисе.
  • Флаги должны быть кратны двум
  • Определение перечисления должно начинаться с 1, а не с 0.
0 голосов
/ 15 августа 2009

В языках, производных от C (C #, C ++, Java), enum фактически представляет собой набор именованных целочисленных значений.

В XML-схеме нет соответствующего понятия, поэтому в веб-сервисах такого понятия нет.

Прежде чем вы или кто-либо еще упомянете аспект <xs:enumeration/>, это не то, для чего он. <xs:enumeration/> предоставляет список (перечисление) возможных лексических значений для типа. Невозможно связать числа с этими лексическими значениями. Следующее enum:

public enum Enumeration1
{
    E1a = 1,
    E1b = 2,
    E1c = 4
}

становится следующей XML-схемой:

<s:simpleType name="Enumeration1">
    <s:restriction base="s:string">
        <s:enumeration value="E1a"/>
        <s:enumeration value="E1b"/>
        <s:enumeration value="E1c"/>
    </s:restriction>
</s:simpleType>

Обратите внимание на отсутствие 1, 2 или 4.

Все это говорит о том, что элемент или атрибут этого типа будет строкой и может иметь одно из значений "E1a", "E1b" или "E1c".

Если клиентский прокси-сервер построен из WSDL с такой схемой, и если генератор прокси-кода достаточно умен, он может решить, что изначально это был язык программирования enum. В этом случае это создаст тип как

public enum Enumeration1
{
    E1a,
    E1b,
    E1c
}

Поскольку он не имеет доступа к целым числам.

0 голосов
/ 04 февраля 2009

В Adobe re: Flex 3 и enum в WSDL перечислены некоторые ошибки. Вы уверены, что используете последнее обновление?

...