Вы на самом деле вызываете метод , определенный в интерфейсе, который, в свою очередь, наследует от IInvokable, объявленного в System.pas.
Если вы проверите свой исходный код, вы заметите, что ни один локальный объект в вашем проекте не реализует интерфейс IInvokable, который вы вызываете, потому что этот метод удаленно выполняется на сервере.
До того, как это произойдет, есть некоторый паскаль-код, используемый для создания правильного SOAP-запроса к серверу, его отправки, а затем ожидания и интерпретации ответа сервера, рассмотрим детали этой реализации. Если вам интересно узнать, как это работает, включите опцию компилятора «use debug .dcus», чтобы вы могли выполнять отладку внутри VCL / RTL.
Затем, как обычно, с помощью команды StepInto (F7) попросите отладчик выполнить метод Transmit шаг за шагом ... после некоторого ассемблера в методе TRIO.GenericStub вы попадете в метод TRIO.Generic, где пакет подготовлен и отправлен.
Для привязки btSOAP, которую я использую для написания этого ответа, соответствующая часть начинается со строки 943 в блоке Rio.pas:
try
FWebNode.Execute(Req, Resp);
finally
{ Clear Outbound headers }
FHeadersOutBound.Clear;
end;
THTTPReqResp.Execute затем использует функции wininet.dll для выполнения соединения, отправки и получения информации с помощью сервера.
Есть несколько уровней, с которыми вы можете углубиться в это ... насколько далеко вы хотите пойти, будет зависеть от ваших интересов, и большое количество деталей выходит далеко за рамки моего ответа здесь ... не стесняйтесь размещать больше вопросы с конкретными вопросами, которые вас интересуют.
Я не уверен, но детали могут меняться между версиями Delphi ... Я сейчас использую Delphi XE.