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

голоса
20

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

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

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

Так как вам нужно жёстко эти значения в обоих приложениях, я думаю , что это нормально использовать описательные строки ( счета - фактуры , договора , WorkOrder , SignedWorkOrder ).

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

Задан 05/08/2008 в 00:43
источник пользователем
На других языках...                            


8 ответов

голоса
6

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

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

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
Ответил 05/08/2008 d 01:12
источник пользователем

голоса
6

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

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

Ответил 05/08/2008 d 00:54
источник пользователем

голоса
3

Если вы не работаете с .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 -> инструмента Proxy генератор для анализа, что в перечислениях эквивалента на языке клиента.

Ответил 08/09/2008 d 00:38
источник пользователем

голоса
3

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

Ответил 05/08/2008 d 02:34
источник пользователем

голоса
3

В .NET, значения перечислений являются (по умолчанию) сериализовать в XML с именем. Для случаев , когда вы можете иметь несколько значений ( флаги ), то он помещает пробел между значениями. Это работает , потому что перечисление не содержит пробелов, так что вы можете получить значение снова, разбивая строку (то есть. «Счет - фактура Договор SignedWorkOrder», используя пример Любош 'ы).

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

Ответил 05/08/2008 d 02:26
источник пользователем

голоса
3

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

Когда вы затем использовать «Add Web Reference» в клиентском приложении, полученный класс должен включать в себя, что перечисление

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

Ответил 05/08/2008 d 00:56
источник пользователем

голоса
2

Есть некоторые довольно веские причины не использовать enumс на границе интерфейса , как это. Рассмотрим Dare разместите на эту тему.

Ответил 08/09/2008 d 13:35
источник пользователем

голоса
0

Я заметил, что при использовании «Add Service Reference» в отличие от «Add Web Reference» из VS.net, фактические значения перечислений попадались, а также имена перечислений. Это действительно раздражает, как мне нужно поддерживать как клиент, 2.0 и 3.5. Я в конечном итоге, перейти в код генерируется 2,0 прокси веб-службы и вручную добавлять значения перечислений каждый раз, когда я внести изменения!

Ответил 08/09/2008 d 00:21
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more