3

我有一些德尔福代码,给定一个项目列表,计算总价,同时考虑到任何可能适用的特殊交易。

用另一种语言重写此代码并非易事。

我应该如何设置它以与在同一台服务器上运行的网站进行通信?每次用户更新购物车时,网站都需要询问价格。可能会有多个并发请求。

delphi 代码需要维护一个内存中的特价商品列表,并定期从数据库中刷新。所以它不能简单地每次都执行或任何简单的事情。

我不知道网站是用什么写的,也不知道它在哪个http服务器下运行,所以我只是在寻找想法或标准方法。

4

7 回答 7

3

听起来 win32 应用程序已经作为 Windows 服务在盒子上运行。因此,如果您无法修改该服务,您将不得不处理它想要接受和响应请求的任何方式。这可以通过套接字或一些更高级别的通信协议,如 Web 服务。

你可以做几件事。编写一个知道如何与服务通信的程序集,并让您的网站使用该程序集。或者,您可以构建一个 shim 服务,该服务知道如何与遗留服务进行通信,但通过更高级别的协议(如 Web 服务)进行通信。无论哪种方式都可以将并发、线程和通信问题隐藏在易于调用的接口后面,但后者将使每个人都更容易与服务进行通信。

于 2009-05-13T20:23:07.917 回答
3

如果您可以修改 delphi 应用程序以接受 XML 请求并通过 TCP 套接字(理想情况下使用 HTTP 协议)以 XML 响应进行响应,您将能够相对轻松地使其与大多数 Web 服务器框架进行互操作。但是如何实现这种集成的具体细节将取决于它所使用的语言/框架。

如果 web 服务器在 windows 上,您可以将 delphi 应用程序编译为可以返回 XML 或 HTML 的 DLL,将参数作为 URL 或 POST 操作的一部分。有关为 Web 服务器制作 Delphi DLL 的一些细节在这里

于 2009-05-13T20:35:17.477 回答
2

现有系统在什么 Web 服务器或操作系统下运行并不重要。重要的是您希望您的代码在什么下运行。如果是 Windows,那么最简单的解决方案是使用 WebBroker 并编写自定义 ISAPI 应用程序,或者使用 SOAP 公开 Web 服务。例如,如果您想编写类似 API 的 REST,则可以使用第一种方法,如果您的 Web 应用程序能够使用 Web 服务,则可以使用第二种方法。

如果您在 IIS 下的同一个机器上同时运行两者,则另一个选择是创建一个 COM/Automation 对象,然后您可以通过服务器端脚本 (ASP) 调用该对象。如果应用程序是 ASP.NET 应用程序,那么我将使用 PRISM 将您的代码移植到程序集中。

于 2009-05-13T20:33:34.733 回答
2

我用一个相当复杂的工人补偿计算器完成了这项工作。我使用RemObjects Sdk创建了一个 Windows 服务。计算以soap方法公开,因此几乎任何东西都可以访问它。

没有必要在服务中使用 RemObjects,但由于它处理了许多底层管道,因此它使操作变得更加容易。客户端不需要 RemObjects,他们只需要能够调用 soap 方法。几乎任何编程语言都可以做到这一点。

您还可以为 IIS 创建一个 isapi dll,它公开一个肥皂接口。如果不同服务器上的其他网站需要访问这些方法,这将很有用。但是,在我的情况下,我通过在防火墙中打开一个端口来访问我的 Windows 服务来处理这个问题。

网上有很多例子。开始阅读的几个地方是About.ComBob 博士

于 2009-05-13T22:37:46.560 回答
1

将此应用程序撕成 Windows 服务。编写将与您的 Windows 服务通信的 Web 服务。您应该花一些时间来设计您的 Web 服务,因为这个 Web 服务将成为您的一致界面,屏蔽旧的 Delphi 应用程序。因此,将来无论何时您想要编写 Web 应用程序、移动应用程序或任何您能想象到的东西,您都将拥有一个一致的接口——XML Web 服务。

于 2009-05-13T20:38:20.063 回答
1

将 Web 应用程序与后台服务集成的一种流行方式是消息代理。

消息流将是:

  • Web 应用程序将“计算请求”消息发送到消息代理上的消息目标,其中包含所有需要的参数以及关联 ID,以将计算请求与来自 Delphi 服务的响应相匹配

  • 一个(或者,在高可用性/负载平衡环境中更多)Delphi 服务处理消息:拉下一条传入消息,通过将参数提供给计算引擎来处理它,然后将“计算结果消息”发送回 Web 服务器

  • Web 服务器可以同步等待响应(并丢弃没有匹配相关 ide 的响应)并构建结果 HTML 文档,或者继续执行其他任务并在单独的线程中异步接收计算结果,例如在基于 Ajax 的线程中Web应用程序

有关 Dopplr 图像服务的介绍,请参阅此幻灯片:

http://de.slideshare.net/carsonified/dopplr-its-made-of-messages-matt-biddulph-presentation

由马特·比杜夫(matt biddulph)的消息制成

于 2013-08-21T16:29:44.867 回答
0

如果你可以让它成为一个服务(但不是一个库),你必须以某种方式进行进程间通信——在 Windows 上有几种方法可以做到这一点:

  • 直接使用套接字,这是最难的,因为您必须自己进行编组/验证
  • 共享内存(糟糕!)
  • RPC 效果很好但并非微不足道
  • DCOM 更容易但配置起来很痛苦
  • WCF - 但是你可以从用 Delphi 编写的 Windows 服务调用它吗?
  • 于 2009-05-13T22:48:46.060 回答