zoukankan      html  css  js  c++  java
  • 无需WEB服务器的WEBServices

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

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

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

     


    把Indy结合到WebBroker

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

    我们的目的是尽量不要改动缺省的设置,所以不能去乱改动SOAP组件。我的注意力集中到了WebBroker上。

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

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

     


    使WebAppDebugger支持Indy

    因为没有"Indy SOAP Server Application"向导(也许以后我会自己写一个),而且目标是创建独立exe程序,所以最具合理性的举动就是从SOAP Server Applicatioin向导开始(File|New|Other,Web Services页,SOAP Server Application)。

    选择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服务器支持。

  • 相关阅读:
    ViewController生命周期
    Core Data 基本数据操作 增删改查 排序
    Core data 如何查看ObjectId
    NSArary自定义对象排序 NSComparator, compare
    tcp/ip协议学习笔记一
    常用mac/unix/linux命令
    IOS pin约束问题 存在间隙
    IOS 常用View属性设置
    ubuntu 16.04菜单栏不显示
    linux实用命令备忘
  • 原文地址:https://www.cnblogs.com/linximf/p/3387371.html
Copyright © 2011-2022 走看看