2010-05-13 2 views
1

0:Как я могу представить переименование третьей стороны через мой asmx?

  • Веб-сервис asmx.
  • Третья сторона dll, которая содержит полезное перечисление.

Вопрос:

Как я могу выставить это перечисление через мой веб-службы без необходимости повторять себя и повторно ввести членов ENUM в в общественном классе моего WebService в?

ответ

3

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

+1

Обратите внимание, что это приведет к отображению перечисления с одинаковыми именами, но не сохранит целочисленные значения. –

3

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

Под «перечислением» 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.

Смежные вопросы