Сервер SOAP Delphi изменяет имя выходного параметра

#web-services #delphi #soap #wsdl

#веб-службы #delphi #soap #wsdl

Вопрос:

Я пишу автономный сервер SOAP, используя Delphi. Он содержит функцию, возвращающую версию сервера, например:

 function TMySOAP.GetVersion: string; stdcall;
begin
  Result := '1.0';
end;
  

Согласно некоторой спецификации, выходное значение функции должно иметь имя ‘Result’, поэтому WSDL должен выглядеть следующим образом:

 <message name="GetVersion3Response">
  <part name="Result" type="xs:string"/>
</message>
  

Но поскольку Delphi использует идентификатор ‘Result’ для своих собственных целей, мой сервер генерирует следующий WSDL:

 <message name="GetVersion3Response">
  <part name="return" type="xs:string"/>
</message>
  

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

Есть ли какой-либо способ изменить имя выходного параметра на ‘Result’?

Ответ №1:

Найду ответ сам:

 procedure TMySOAP.GetVersion(out Result: string); stdcall;
begin
  Result := '1.0';
end;
  

Кажется, это работает.

Комментарии:

1. Действительно, библиотеки DLL никогда не должны передавать String через свои границы — особенно не в качестве результата функции.