無需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服務器支持。

相關文章
相關標籤/搜索