ссылки “attributeGroup”, проигнорированные Delphi Инструмент Импорта WSDL

Я абсолютно плохо знаком с веб-сервисами, но не плохо знаком с Delphi.

Я импортирую файл WSDL в Delphi 2010 с "мастером" Средства импорта WSDL. Файл WSDL содержит некоторые теги "attributeGroup", которые полностью игнорирует Delphi, который является, по-видимому, ошибкой, хотя я еще не нашел запись на Качестве Центральной для этой проблемы, только упоминает на форумах как здесь и здесь.

Мой вопрос имеет несколько частей:

  1. Каково лучшее обходное решение?
  2. Я записал, что сценарий Python для форматирования WSDL регистрирует таким образом, что все ссылки на теги attributeGroup заменяются объявлением атрибутов, определенных в attributeGroups; другими словами, выравнивание ссылок. Вывод успешно импортируется в Delphi через "мастер" средства импорта WSDL и выглядит корректным, но я должен все же протестировать, будут ли сообщения, созданные через этот новый файл WSDL, работать правильно. Эта стратегия, вероятно, будет жизнеспособна, или я должен выйти теперь и перейти на что-то еще более продуктивное?

Обновление

На основе моих событий и ответов в этом вопросе, я решил пойти путем обертки с консольным приложением C#, которое ест входные данные JSON и выводы данные ответа JSON. Приложение Delphi управляет приложением C#. Часть SOAP всего этого теперь легка, и "просто работает" в C#.NET, и остальная часть функциональности обрабатывается хорошо Delphi. Я рекомендовал бы этот маршрут кому-либо еще с подобными проблемами. Я действительно пытался экспортировать блок SOAP C# как библиотеку COM и соединиться с этим от Delphi, но это стало очень сложным, потому что спецификация SOAP в моем конкретном приложении является большой и несколько сложной.

5
задан Caleb Hattingh 6 July 2010 в 11:09
поделиться

3 ответа

Хорошо, это заняло некоторое время.

Согласно в этом сообщении , существуют определенные теги, которые инструмент .NET wsdl.exe просто не распознает при импорте файла wsdl. Согласно MSDN :

attributeGroup : игнорируется. DataContractSerializer не поддерживает использование xs: group, xs: attributeGroup и xs: attribute. Эти объявления игнорируются как дочерние по отношению к xs: schema, но на них нельзя ссылаться из complexType или других поддерживаемых конструкций.

Это поведение также описано (хотя и очень трудно для понимания) в одном из блогов MSDN . В моем конкретном случае конкретная часть файла wsdl, вызывающая проблему, выглядит следующим образом:

 <xs:complexType name="PhonesType">
     <xs:annotation>
         <xs:documentation xml:lang="en">Provides detailed phone information.</   xs:documentation>
     </xs:annotation>
     <xs:sequence>
         <xs:element maxOccurs="unbounded" name="Phone">
             <xs:annotation>
                 <xs:documentation xml:lang="en">Used to pass detailed phone information.</xs:documentation>
             </xs:annotation>
             <xs:complexType>
                 <xs:attributeGroup ref="TelephoneInfoGroup"/>
                 <xs:attributeGroup ref="ID_OptionalGroup">
                     <xs:annotation>
                         <xs:documentation xml:lang="en">The ID attribute in this group is a unique identifying value assigned by the creating system and may be used to reference a primary-key value within a database or in a particular implementation.</xs:documentation>
                     </xs:annotation>
                 </xs:attributeGroup>
             </xs:complexType>
         </xs:element>
     </xs:sequence>
 </xs:complexType>

Кажется, что игнорируется .NET wsdl.exe, точно так же, как он игнорировался импортером wsdl Delphi. В такой ситуации, когда импорт не удается как в Delphi, так и в .NET, вероятно, придется изменить файл wsdl, а это означает, что мне все-таки придется использовать самодельный python ref-flattener.

2
ответ дан 15 December 2019 в 00:52
поделиться

У нас была аналогичная проблема с Delphi 2009 и стандартной службой Soap (CRM). Это не было связано с attributeGroup. Мы обнаружили так много несовместимостей, что наконец решили использовать небольшое приложение C # в качестве прокси для реальной службы на основе .Net.

1
ответ дан 15 December 2019 в 00:52
поделиться

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

Позже я разместил другой вопрос на Embarcadero Developer Network, где Ник Ходжес сказал, что

Мы концентрируемся на разработке клиентов [...] если вы хотите создавать SOAP-серверы, то я бы посоветовал вам также обратить внимание на Delphi Prism.

Мы решили перейти на C# для разработки наших SOAP-серверов. Я решил, что служба будет общаться с базой данных, к которой затем будет обращаться наше приложение Delphi.

Позже я столкнулся с проблемами при разработке клиента и под Delphi, поэтому мы делаем это тоже на C#. На этот раз класс C# является com visible и может быть доступен из Delphi. Кажется, все работает нормально.

С уважением, Миэль.

1
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: