【问题标题】:How to access a .Net web service from a Delphi Win32 application?如何从 Delphi Win32 应用程序访问 .Net Web 服务?
【发布时间】:2011-08-18 08:57:45
【问题描述】:

如果我想让 Delphi Win32 应用程序使用 .Net Web 服务,我有哪些选择?

可以直接互动吗?或者我是否必须求助于一个中间人软件,例如通过 COM 与 Delphi 应用程序通信?

有问题的 Delphi 应用程序是用 Delphi 2006 编写的,但计划很快更新到 Delphi XE。

【问题讨论】:

  • 好消息!您访问它的方式与访问任何其他 Web 服务的方式相同。您可以通过Web 访问它,就像访问Web 站点 一样。如果您不能通过普通的旧 wget 与该服务通信,那么它实际上并不是一个 Web 服务。 .Net 完全无关紧要。
  • 这当然可以作为简单网络服务的一个选项。但这在更复杂的现实世界应用程序中有多可行?在我看来,这将需要额外的解释层,并且在这种复杂性下,直接访问接口并执行其方法对开发人员来说更加透明。
  • 阿蒙蒂,你是在处理我的评论吗?是的,继续在尽可能多的层上构建您的应用程序。我的观点是,在它之下仍然只是网络,没有什么特别的。 Web 将您的客户端应用程序与服务器应用程序分开。无论您在其上构建了多少层,Web 仍然是障碍。该障碍的服务器端的任何内容都与您在客户端所做的一切无关。服务器可以是 .Net、Linux 甚至是烤面包机,它对您的客户端程序没有任何影响。
  • @RobKennedy 烤面包机可以有所作为。它可以做早餐。 [HTTPGet][HTTPBreakfast]foo()...

标签: .net web-services delphi winapi com


【解决方案1】:

当您的项目在 Delphi IDE 中打开时,转到:

文件 |新 |其他... |德尔福项目 |网络服务 | WSDL 导入器

现在 WSDL 导入器向导将启动。输入您的 Web 服务的 WSDL 地址,然后按 Next。它将向您展示有关如何处理 WSDL 的不同选项。如果需要,您可以更改选项。最终,当向导完成时,您的项目中将有一个新单元,其中包含用于 Web 服务的客户端包装类和接口。现在你可以用不同的方式使用这个类。 最简单的方法是调用名为 Get(Your_WebService_Name) 的函数。例如,如果您的 Web 服务名称是 TestWebService,则该函数将命名为 GetTestWebService。

该函数将返回一个与您的webservice代表相同接口的接口,现在您可以调用该接口的方法,它会自动将请求传输到远程服务器,并将结果返回给您。示例源代码可能如下所示:

var
  MyTestService: ITestService;
begin
  MyTestService := GetTestService();
  MyTestService.TestMethod;
end;

另一种选择是手动设置一个 THttpRio 对象并使用它。实际上这就是 Get(Your_WebService_Name) 函数在内部所做的。

【讨论】:

    【解决方案2】:

    只需将InvRegistry.RegisterInvokeOptions(TypeInfo(xxx), ioDocument); 行添加到生成的导入文件的初始化部分即可。它将作为一种魅力。
    注意:xxx 必须替换为您导入的 Web 服务类名称。

    【讨论】:

      【解决方案3】:

      这不适用于 C# Web 服务,期间。 Delphi 客户端不理解 C# 的标头,反之亦然。

      【讨论】:

      • 实际上没有“C# Web 服务”——.Net WCF 使用例如 SOAP 消息,它们只是 XML
      • “C# 的标头”是什么样的?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多