Проблема может быть не на стороне импорта, а скорее на стороне экспорта.У нас возникла ситуация:
- Серверное приложение с кодировкой Delphi, которое также отвечает на веб-запросы SOAP.
- Клиентское приложение с кодировкой .Net, использующее SOAP для взаимодействия с серверным приложением Delphi.
Серверное приложение Delphi не будет и не будет экспортировать определенный (базовый) тип в свой ответ WSDL, если этот (базовый) тип не используется ни в одном из экспортируемых интерфейсов SOAP.
Пример:
TBaseReponseClass = class(TRemotable)
end;
TLoginResponseClass = class(TBaseReponseClass)
end;
ISOAPResponse = interface(IInvokable)
['{SomeGUID}']
function Ping: TBaseReponseClass ; stdcall
function Login: TLoginResponseClass ; stdcall;
end;
С функцией Ping в ISOAPResponse все работает нормально.
Без функции Ping в ISOAPResponse TBaseResponseClass не будет экспортироваться в WSDL и импортироватьсяWSDL на стороне .Net будет выдавать ошибки о неопределенных элементах.
Я полагаю, вы можете проверить WSDL, полученный от вашего клиента, чтобы увидеть, использует ли он какие-либо классы, для которых один или несколько классов в иерархии предковне включены в WSDL / схему.Если это так, то вам, возможно, придется вернуться к своим клиентам, чтобы они изменили интерфейсы.Или, если вам повезет, возможно, найдите некоторые варианты включения классов-предков, на которые нет прямой ссылки, включенных в WSDL / Schema.Мы не исследовали последнее, так как оба приложения находятся под нашим собственным контролем, и было проще просто добавить функцию «Ping».