使用IIS在Delphi 2009中创建REST Web服务

9

我能否在Delphi 2009中创建一个运行在IIS上的REST Web服务?我已经研究了Web Broker和Web Snap Web Server应用程序,但是目前还无法弄清楚。如果可能,我该怎么做才能让它起作用呢?

1个回答

11

在 Delphi 中,REST web 服务非常简单...实际上有时候太简单了,它有时会被掩盖在复杂的 WebSnap 演示中。您可以使用 Web broker、WebSnap、Indy、Synapse 或其他通用的 HTTP 服务器组件。我不建议您在第一次尝试 RESTful 的时候使用 WebSnap。我建议您选择 WebBroker,或者更简单的是选择 Indy。

File->New->Other WebBroker->Web Server Application

您可以选择 ISAPI DLL 或 Web App Debugger 来创建应用程序……对于您的第一个应用程序,我建议您选择 WAD 应用程序。(事实上,任何 Web 应用程序都应该从服务器开始 WAD 然后创建一个客户端测试应用程序,以便稍后更轻松地进行调试。)如果您选择 WAD,则给它一个名称 - 比如 MyFirstREST。这将创建一个具有响应任何请求的默认 Web 模块的项目。

右键单击 Web 模块,点击操作编辑器弹出菜单项,并通过自定义 PathInfo 设置创建您的 RESTful 命令。然后,您只需定义事件来响应这些命令。

对于 Indy,只需启动新的 Windows 服务应用程序并在服务数据模块上放置 TidHTTPServer 组件。然后为简单的 HTTP GET 请求 (http://yourserver/customer?id=1) 定义一个 OnCommandGET,也要定义一个 OnCommandOther 处理 POST 请求。

事件中会传入 TIdHTTPResponseInfo 和 TIdHTTPResponseInfo,只需要查看 GET 的 QueryParams,提取传递的参数并填充响应的 ContentStream(或 ContentText),以及 ContentType。

许多有关 REST 实现的教程可以在网上找到 - 其中之一是来自 IBM:http://www.ibm.com/developerworks/webservices/library/ws-restful/

通常情况下,使用RESTful服务器来处理XML请求和响应,但对于如何实现服务器并没有限制。这完全取决于客户端的期望。如果您也控制客户端,则可以通过序列化TObject后代将对象来往传递。


1
@Darian - "实际上有时候它太简单了,因为有时候它被掩盖在复杂的WebSnap演示中" - 对此表示赞同 - Embarcadero仍然没有掌握KISS...但我认为XE中实现的REST客户端代理非常好用,非常容易设置 - 通过KBMemTable csv流式传输,我能够使用XE REST客户端将整个数据集发送到网络,并且只需要几行代码 - 向导生成的代理处理了所有繁琐的工作。 - Vector
@Mikey 这些演示是开源的,欢迎贡献。 :-) - Ondrej Kelle
@daemon_x 使用Subversion客户端从代码库中进行检出(指南)。 - Ondrej Kelle
谢谢您的回答,非常有帮助。我尝试创建一个WAD,但每当我单击http://localhost:8081/ServerInfo.ServerInfo链接时,Internet Explorer都会打开“无法显示页面”。我需要做些什么? - There is no spoon
你需要启动Web应用程序调试器。这应该在你的工具菜单中。如果没有,那么它需要运行一次以将自己注册到IDE中。 - Darian Miller
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接