WSDL, Enums и C #: все еще мутно - PullRequest
       18

WSDL, Enums и C #: все еще мутно

7 голосов
/ 30 августа 2010

Я пытался найти это в Интернете, но все примеры WSDL, похоже, не совсем объясняют, следует ли мне отмечать вещи как строку базового типа в WSDL или int ...

По сути, я пытаюсь сделать свой WSDL, чтобы я мог представлять Перечисление. Я уже имею в виду C # Enum, что хочу сопоставить его с ...

public enum MyEnum {
    Item1 = 0,
    Item2 = 1,
    Item3 = 2,
    SpecialItem = 99
}

Я не уверен, как должен выглядеть мой WSDL ... Я полагаю, что это один из двух, но даже тогда я не уверен на 100% ...

<wsdl:types>
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                >
        <xsd:simpleType name="MyEnum">
            <xsd:restriction base="xsd:int">
                <xsd:enumeration value="0" />
                <xsd:enumeration value="1" />
                <xsd:enumeration value="2" />
                <xsd:enumeration value="99" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:schema>
</wsdl:types>

OR

<wsdl:types>
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                >
        <xsd:simpleType name="MyEnum">
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="Item1" />
                <xsd:enumeration value="Item2" />
                <xsd:enumeration value="Item3" />
                <xsd:enumeration value="SpecialItem" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:schema>
</wsdl:types>

1 Ответ

9 голосов
/ 30 августа 2010

Перечисления будут выглядеть как их строковые представления.Таким образом, правильный wsdl представит перечисления в виде:

<xs:simpleType name="MyEnum">
    <xs:restriction base="xsd:string">
      <xs:enumeration value="Item1" />
      <xs:enumeration value="Item2" />
      <xs:enumeration value="Item3" />
      <xs:enumeration value="SpecialItem" />
    </xs:restriction>
  </xs:simpleType>

Вышеприведенное автоматически сериализует / десериализует для типа перечисления MyEnum для вас.Если вы представляете перечисления как xsd: int, то вам в конечном итоге придется конвертировать их вручную назад и вперед.

Вы можете обратиться к определению перечисления в вашей схеме следующим образом:

<xsd:complexType name="Class1">
    <xsd:sequence>
      <xsd:element minOccurs="1" maxOccurs="1" name="MyEnumProperty" type="MyEnum" />
    </xsd:sequence>
  </xsd:complexType>
...