Как я могу выставить перечисление третьей стороны через мой asmx? - PullRequest
1 голос
/ 13 мая 2010

Дано:

  • Веб-сервис asmx.
  • Сторонний dll, содержащий полезное перечисление.

Вопрос:

Как я могу выставить это перечисление через мой веб-сервис без повторения я и заново наберу членов enum в публичном классе моего веб-сервиса?

Ответы [ 2 ]

3 голосов
/ 12 июня 2013

Этот вопрос задает вопрос о том, как предоставить перечисление языка программирования через веб-сервис SOAP. Это не может быть сделано. Вот почему нет:

Под "enum" OP подразумевается конструкция языка программирования, которая создает тип, состоящий из именованных целочисленных значений. Например:

public enum MyEnum
{
    Value1 = 10,
    Value2 = 20,
    Value3 = 30
}

Это создает связь между именами, такими как Value, и соответствующими значениями, такими как 10. В веб-сервисах SOAP нет ничего подобного.

Веб-службы SOAP описывают себя клиентам через WSDL (язык описания веб-служб). WSDL использует XML-схему (XSD) для описания формы данных, подлежащих обмену между клиентами и службой.

XML-схема имеет концепцию «перечисления», которая описывает, что определенный элемент или атрибут может иметь одно из нескольких значений. Эти значения перечислены (перечислены) в схеме XML. Например,

  <xs:simpleType name="MyEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Value1"/>
      <xs:enumeration value="Value2"/>
      <xs:enumeration value="Value3"/>
    </xs:restriction>
  </xs:simpleType>

Это определяет тип, который может принимать одно из трех строковых значений: «Value1», «Value2» или «Value3». Эти значения никак не связаны с целочисленными значениями. Просто чтобы забить его домой, подумайте о следующем:

  <xs:simpleType name="MyDateEnumeration">
    <xs:restriction base="xs:date">
      <xs:enumeration value="2013-06-01"/>
      <xs:enumeration value="2013-06-05"/>
      <xs:enumeration value="2014-06-01"/>
    </xs:restriction>
  </xs:simpleType>

Определяет тип, который может принимать одно из трех значений date: 1 июня 2013 г., 5 июня 2013 г. или 1 июня 2014 г. Обратите внимание, что нет связи ни с целыми значениями, ни даже с любой с любым именем строки.

Суть в том, что XML-схема не может описать концепцию языка программирования enum. В результате WSDL не может использовать концепцию языка программирования enum, что означает, что веб-службы SOAP не могут предоставлять enum.

Лучшее, что можно сделать - это раскрыть имена или значения, но не оба, как в MyEnum выше. Когда клиент использует эту услугу, он может перевести MyEnum в enum на языке программирования. Однако, поскольку нет целочисленного значения, связанного с каким-либо из имен, разумно ожидать, что каждый клиент будет использовать другое целочисленное значение. Один клиент может использовать 1 для Value1, а другой может использовать 0.

3 голосов
/ 13 мая 2010

Вы можете создать метод, который принимает или возвращает значение с перечислением в нем. Пространство имен в перечислении изменится на пространство имен вашего сервиса, когда они сгенерируют прокси-класс, но у вас будут значения, которые они вводят с вашей стороны. Это не должно быть проблемой, если только они не пытаются использовать одно и то же перечисление в вашем сервисе и третьей стороне.

...