Я создал прототип службы WCF, в которой есть операция, которая получает массив объектов в виде одного параметра.Проблема в том, что каждый объект наследуется от базового класса (называемого Message), и порядок их не известен заранее.Сначала то, что WCF получает (неправильно), представляет собой массив элементов Message, а не правильный тип, полученный из Message.
После некоторых усилий я смог вызвать эту службу из Delphi 6.02.Я использовал импортер WSDL для создания основного клиента и вручную отредактировал исходный код, чтобы исправить некоторые несовместимости с интерпретацией Delphi SOAP.По сути, я делаю некоторые изменения в событии OnBeforeExecute, например:
SOAPRequest := StringReplace(SOAPRequest, '<item ', '<Message ', [rfReplaceAll]);
Приведенный выше код исправляет способ, которым Delphi передает элементы массива.Я узнал об этом здесь Array_Of_Int в клиенте SOAP .
Затем каждый объект кодируется как Сообщение, но атрибут указывает на его тип времени выполнения:
<Message xsi:type="Authenticate"> <!-- I need to get this, exactly, types can vary -->
проблема в том, что у нас есть другие виды массивов.Затем вхождение «item» может быть заменено на Attachment или Address.Если я отмечу класс как ioDocument, тогда я получу базовый класс как tag-name, но потеряю правильный тип через атрибут.
Есть идеи, как с этим справиться?Может быть, другая библиотека SOAP, которую я мог бы использовать?Или .NET может понять кодировку "item"?
Спасибо.