#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
через свои границы — особенно не в качестве результата функции.