web-services - Delphi Web 服务如何工作? (在运行时添加方法??)

标签 web-services delphi interface runtime

我已经使用 WSDL 导入器在 Delphi XE 中创建了 Web 服务。 Delphi 为我生成模块 ITransmitter1.pas ITransmitter接口(interface)和GetITransmitter函数。

要使用我使用的网络服务:

var Transmitter: ITransmitter;
begin
  Transmitter := GetITransmitter(True, '', nil);
  Transmitter.Transmit(Memo1.Text, OutXML);
end;

但我在任何地方都看不到 Transmit 方法的主体...

在 ITransmitter.pas 中我看到:

  InvRegistry.RegisterInterface(TypeInfo(ITransmitter), 'urn:TransmitterIntf-ITransmitter', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ITransmitter), 'urn:TransmitterIntf-ITransmitter#Transmit');

如果我评论这一行,我会收到“接口(interface)不支持”错误。 正如我在这里看到的,delphi 正在运行时添加方法! 它是如何工作的 ?我可以在运行时将方法添加到我自己的类中吗?

最佳答案

如果您使用 WSDL 导入器创建了 Web 服务客户端,则生成的客户端代码将调用服务器上的方法。所以实际上,方法“body”(代码)位于Web服务服务器上。

Delphi 基于 WSDL 生成 Soap 请求,并在后台使用 RTTI(内省(introspection))以 XML 形式生成 Web 服务调用的参数等。该 XML 被发送到服务器,服务器执行方法实现并发回 Soap 响应。

如果您创建 Web 服务服务器,情况则相反,在这种情况下,Delphi 应用程序当然需要实现所有方法体。

关于web-services - Delphi Web 服务如何工作? (在运行时添加方法??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549253/

相关文章:

ios - 如何设置TPanel透明?

typescript - 类型 'string' 的索引签名在类型 'Object' .ts(2322) 中丢失

.net - WCF、ASP.NET 成员资格提供程序和身份验证服务

ios - 如何从 UITableView 中的 Web 服务加载大量数据?

delphi - Win-7下列出服务及服务状态

delphi - 通过进程ID获取窗口句柄

c# - 在 .net 中将 XML 包装在 SOAP 信封中

c# - Mono for android 使用授权的 Web 服务

java - 在 Java 中,你如何称呼这种模式/习惯用法?

c++ - C++中没有数据成员的类