在Dephi中使用基于Indy HttpServer的Soap来部署三层应用,Step by Step!

SOAP的正式提出应该在99年或者2000年吧,那个时候还是internet刚开始发展的时候,我也在忙着找工作,对于这个名词应该一无所知,起初接触一些三层从MIDASCOM还有Cobra等,直到发现了SOAP,才觉得世上真是有这么一种如此便捷的实现三层部署的平台。

 

闲话多罗嗦了几句,下面进入正题

如果你还没有开始学习SOAP可以建议参考李维大师写Delphi6/Kylix2 SOAP/Web Service程序设计

如果想了解SOAP标准可以参考 SOAP Specification

 

以下开始一步一步来介绍如何使用Delphi来创建一个Stand aloneSoap Application

注:笔者使用Delphi7.0

如果你以前写给或者学过Soap Application,教科书上都会说New->Web Service->Soap Application,选择Web App Debgger executable,如下图


然而这样做都摆脱不了对于Web Server的依赖,Delphi有很强大的Indy为其开发免费的Http控件,一样可以用来发布你的Soap程序

步骤一:建立一个Application

步骤二:在主Form上放一些控件如图


本例子使用DBX来连接数据库,当然你可以使用ADOBDE等等,先不用写代码

步骤三:建立一个Soap Server Data Module  New->Others->WebServices->如图


建立这个Data Module是为了可以建立三层的数据库连接,笔者为了简便期间将其他接口也在Data Module中定义(其实按严格来说其他接口应另开单元去实现,而Data Module只是实现数据库操作)。

建立Data Module如下:命名为MySoapTest,放上一个DataProvider

生成接口和实现类如下:

IMySoapTest = interface(IAppServerSOAP)

    ['{A2F35762-FD52-44C2-9548-3B26CA5D3DD3}']

  end;

 

 

  TMySoapTest = class(TSoapDataModule, IMySoapTest, IAppServerSOAP, IAppServer)

    dsAPP: TDataSetProvider;

  private

  public

  end;

这样就可以在这个上面封装接口或者进行数据访问服务器端编写了。

DataProviderdataset指向主窗口的Query

然后写一个方法Test,需要在接口部分定义,然后在实现类中实现。

  IMySoapTest = interface(IAppServerSOAP)

    ['{A2F35762-FD52-44C2-9548-3B26CA5D3DD3}']

    function Test:string;stdcall;

  end;

 

TMySoapTest = class(TSoapDataModule, IMySoapTest, IAppServerSOAP, IAppServer)

    dsAPP: TDataSetProvider;

  private

  public

    function Test:string;stdcall;

  end;

 

function TMySoapTest.Test: string;

begin

  result:= 'Hello World';

end;

 

然后你需要建一个SoapWebModule,可惜的是Delphi7.0还不提供向导来单据建一个Soap WebModule,一个简单的方法是用Delphi的向导来建立一个Soap Application,然后将其中的WebModule copy出来,Add到这个project中,不需要编写任何代码,如下图:

服务器端最后一步,就是如何使用Indy Http Server来发布你的Soap,你需要引用一个Unit,这个文件就是 /Borland/Delphi7/Source/Indy/IdHTTPWebBrokerBridge.pas

在主Form中申明一个Server

FServer:TIdHTTPWebBrokerBridge;

在窗体创建事件中编写如下代码

  FServer:=TIdHTTPWebBrokerBridge.Create(self);

  FServer.RegisterWebModuleClass(TwmSOAPIndy);  //这个是Soap Web Module

设置服务器端口FServer.port=1024

然后设置FServer.Active属性来启动或者关闭Server

记得Free Server FreeAndNil(FServer);

 

这样服务器端工作就完成了,接下来编写客户端。

客户端完成两个工作,一个是通过三层数据库客户端来连接服务器,取得数据,二是调用服务器端的Test方法。

你需要用到两个控件HttpRIOSoapConnection。在Web Services一栏中可以找到。

URL设置成Http://localhost:1024/soap/IMySoapTest,在客户端User服务器端的Datamodule,(其实正确做法是在服务器端将interfaceimplementation分开,引用interface即可),放一个Button,代码如下:

  showmessage((HttpRIO as IMySoapTest).Test);

这样就完成了三层方法调用。

 

数据库连接只需要拖几个控件(测试前提是服务器启动着),SoapConnection-ClientDataSet-DataSource

 

以上讲这些只是提供一个三层的方法调用和数据库访问平台,使用Delphi可以写出更强大的应用,包括对象的三层传递,我也正在研究中,任何一种技术都要放到实际应用中去验证其先进性,希望大家多交流心得。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

shuyi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值