无需WEB服务器的WEBServices

本文将介绍如何将Indy控件组与Delphi 6的Web Services (SOAP)支持相结合。关于如何建立Web Services的更多信息,请参阅Nick Hodges的文章,《Web上的莎士比亚》(原文在Borland社区,地址:http://community.borland.com/article/0,1410,27399,00.htmlhtml

我记不得为何要写下面这个程序了。不管如何,应该是想找到建立独立Web服务的方便法子--也就是说,不须要Web服务器的支持。web

查阅了在新闻组borland.public.delphi.webservices.soap上最近的帖子,还有一些其它地方的来的提示以后,我写出如下的代码,并且还顺便清理了一下大脑中乱如蛛网的思路。而后就写了这篇文章。浏览器

 


把Indy结合到WebBroker服务器

Delphi 6 SOAP支持组件基于WebBroker。很典型地,在WebBroker应用中,实现IWebDispatch的组件放置于TwebModule上。至于SOAP服务器,这个组件则是THTTPSOAPDispatcher:
架构

咱们的目的是尽可能不要改动缺省的设置,因此不能去乱改动SOAP组件。个人注意力集中到了WebBroker上。spa

观察WebBroker架构,我发现底层是独立于应用程序类型。ISAPI、CGI,管它呢,这可有可无。基本原则是同样的:你从客户端获得一个请求(TwebRequest),而后在服务器端做出回应(TwebResponse)。orm

Indy组件TIdHTTPServer的请求/回应机制与此类似。因此我打算实现一些与ISAPI和CGI中差很少的封装类,钩到TIdHTTPServer的CommandGet方法中,这样来截获和处理请求。
结果就获得了IndyAPP.pas和IndyHTTP.pas中的代码(ISAPI、CGI等等的相应单元为xxxApp和xxxHTTP)。注意,我没有填满全部的TwebRequestIndy和TwebResponseIndy类方法,或许某人比我更熟悉Indy的,可以完成这个工做。htm

 


使WebAppDebugger支持Indy接口

由于没有"Indy SOAP Server Application"向导(也许之后我会本身写一个),并且目标是建立独立exe程序,因此最具合理性的举动就是从SOAP Server Applicatioin向导开始(File|New|Other,Web Services页,SOAP Server Application)。
ci

选择Web App Debugger executable。我就是这么作的。我用Dummy这个简单的词做为CoClass名称,由于这里建立的代码将移往其它地方。
 

在主窗体的实现部分:



unit Unit1;

interface

uses
  SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses ComApp;

{$R *.DFM}

const
  CLASS_ComWebApp: TGUID = '{44139136-EFD0-4044-8A3C-13484508A833}';

initialization
  TWebAppAutoObjectFactory.Create(Class_ComWebApp, 'Dummy', 'Dummy Object');

end.



我把CLASS_ComWebApp常量和Initialization部分移除了。

条件定义{$APPTYPE GUI}并不须要,因此也移去了。

在uses部分,我把COMApp改成IndyApp,并且在Application.Initialize以前,把DefaultPort属性设置为合适的端口号(1024),主窗口建立后,用Active打开它。

 


服务,请服务v

使用Invokable Wizard(我和Borland的共同做品),我建立了一个简单的接口和invokable class。把实现单元(DemoImpl)加到项目的uses子句(以确保invokable class在程序运行时被注册)。一切就绪了。

运行程序,在浏览器中键入http://localhost/1024/wsdl/IDemo。看!WSDL发布了!几个小时的心血、眼泪和汗水没有白费,我们也能够拥有本身的独立Web Service应用了。无需考虑.NET,甚至不用Web服务器支持。

相关文章
相关标签/搜索