Подтвердить что ты не робот

Как передать перечисленные значения в веб-службу

Моя дилемма в основном состоит в том, как делиться перечислением между двумя приложениями.

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

Тип документа (7 возможных типов документов: счет-фактура, контракт и т.д.) передается в качестве параметра методу UploadDocument веб-службы. Вопрос в том, каков должен быть тип (и возможные значения) этого параметра?

Поскольку вам нужно жестко кодировать эти значения в обоих приложениях, я думаю, что это O.K. для использования описательной строки (Invoice, Contract, WorkOrder, SignedWorkOrder).

Возможно, это лучший подход для создания перечисления DocumentTypes в первом приложении и для его воспроизведения во втором приложении, а затем передать соответствующее целочисленное значение веб-службе между ними?

4b9b3361

Ответ 1

Я могу говорить только о .net, но если у вас есть ASP.net Webservice, вы должны иметь возможность добавлять перечисление непосредственно к нему.

Когда вы затем используете "Добавить веб-ссылку" в своем клиентском приложении, итоговый класс должен включать в себя перечисление

Но это из-за моей головы, я уверен, что сделал это в прошлом, но я не могу сказать точно.

Ответ 2

Я предлагаю не передавать целое число между ними, просто для удобства чтения и отладки. Скажите, что вы просматриваете свои журналы, и вы видите кучу 500 ошибок для DocumentType = 4. Теперь вам нужно посмотреть, какой DocumentType равен 4. Или если одно из приложений относится к числу, которое не существует в другом, возможно, из-за несоответствующих версий.

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

Ответ 3

Я бы все же использовал перечисление внутри, но ожидал бы, что потребители передадут мне только имя, а не числовое значение.

просто какой-то глупый пример для иллюстрации:

public enum DocumentType
{
  Invoice,
  Contract,
  WorkOrder,
  SignedWorkOrder
}

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}

Ответ 4

В .NET значения перечисления (по умолчанию) сериализуются в xml с именем. Для случаев, когда вы можете иметь несколько значений (flags), тогда он помещает пробел между значениями. Это работает, потому что перечисление не содержит пробелов, поэтому вы можете получить значение снова, разделив строку (например, "Invoice Contract SignedWorkOrder", используя пример lubos).

Вы можете управлять сериализацией значений в веб-службах asp.net с помощью XmlEnumAttribute или используя EnumMember при использовании WCF.

Ответ 5

Если вы потребляете свой веб-сервис с .NET-страницы/приложения, вы можете получить доступ к перечислению после добавления веб-ссылки в проект, который использует эту услугу.

Ответ 6

Если вы не работаете с .NET для .NET SOAP, вы все равно можете определить перечислитель, если обе конечные точки используют WSDL.

<s:simpleType name="MyEnum">    
     <s:restriction base="s:string">
          <s:enumeration value="Wow"/>
          <s:enumeration value="This"/>
          <s:enumeration value="Is"/>
          <s:enumeration value="Really"/>
          <s:enumeration value="Simple"/>
     </s:restriction>
</s:simpleType>

Его до WSDL → Генератор прокси-сервера для анализа этого эквивалента перечисления на языке клиента.

Ответ 7

Есть несколько веских причин не использовать enum на границе интерфейса. Рассмотрим Dare post по теме.

Ответ 8

Я заметил, что при использовании "Добавить ссылку на службу", а не "Добавить веб-ссылку" из VS.net, появляются фактические значения перечисления, а также имена переименований. Это очень раздражает, так как мне нужно поддерживать как клиентов 2.0, так и 3.5. Я в конечном итоге должен войти в созданный 2.0 прокси-код веб-службы и вручную добавлять значения перечисления каждый раз, когда я делаю изменения!