基于WebService的DataSnap

本文将使用 SOAP 和 DataSnap 做一个基于 WebService 的多层应用的例子,实现通过 SOAP 实现三层数据访问。本例子的功能是在服务端通过 dbExpress 的数据访问控件取得数据表内容,然后将其通过 SOAP 传递到客户端再显示,客户端也可以修改数据并更新到服务端。

服务端:
1.New|WebServices|Soap Server Application ,如下图:

选 Web App Debugger executeable 类型, CoClass Name 为:wadSoapDemo3 ,如下图:

确定后将自动提示是否要新建一个接口,如下图,因为本例子不需要自定义接口,所以选择取消:

2.新建 SOAP Server Data Module ,其向导如下图,输入模块名:SDMDemo3 即可生成一个 SOAP 数据模块,提供了一个名为 IAppServerSOAP 的 WebService 接口:

3.在生成后的 SoapDataModule 中放入四个数据库控件: SQLConnection1, SQLDataSet1, DataSetProvider1 ,其各属性设置如下表:

SQLConnection1 ConnectionName = IBLocal;
LoginPrompt = false;
Params->Values["Database"] = "[...]\\Examples\\Database\\Employee.gdb";
// 上面的 [...] 为你的 InterBase 安装路径
SQLDataSet1 SQLConnection = SQLConnection1;
CommandText = "select FULL_NAME, PHONE_EXT from EMPLOYEE";
DataSetProvider1 DataSet = SQLDataSet1;

完成后的 WebModule 如下图:

4.SaveAll , Unit3 命名为: Demo3SDM, Unit2 命名为: MainWM , Unit1 不改名, Project1 命名为: Demo3 ;
5.编译之即可产生: Demo3.exe ,至此,不用写一行代码即完成服务端的编写;

先运行一次 Demo3.exe ,完成注册的工作后启动 Web App Debugger 。打开浏览器, 输入 URL 为: http://localhost:1024/Demo3.wadSoapDemo3 即可看到一个标准的 SOAP 应用说明页面,在其中可以看到导出了三个与 DataSnap 有关的接口:
1、IAppServer : DataSnap 的基本接口,在 SOAP 应用中并没有使用,估计是为与 Delphi 6 未打 Patch 2# 开发的程序兼容而保留的;
2、IAppServerSOAP : SOAP 多层应用的基本接口,是 MIDAS 中的 IAppServer 的 SOAP 版;
3、ISDMDemo3 : SOAP Server Data Module 的接口。

客户端程序:
1.New|Application 新建一个一般 VCL 应用程序;
2.SaveAll , Unit1 命名为 Main , Project1 命名为 Client ;
3.在 Form 上放上一个 SoapConnection, ClientDataSet, DataSource, DBGrid, DBNavigator, Button 等几个控件,其各属性设置如下表:

SoapConnection1 URL = "http://localhost:1024/Demo3.wadSoapDemo3/soap";
ClientDataSet1

RemoteServer = SoapConnection1;
Provider = "DataSetProvider1";
Active = true;

DataSource1 DataSet = ClientDataSet1;
DBGrid1 DataSource = DataSource1;
DBNavigator DataSource = DataSource1;
Button1 Caption = "Apply";

正常情况下,设置 ClientDataSet 的 Provider 属性时,点击下拉按钮将使用服务端运行,并列出所有 Provider (本例只有一个)。设置好 ClientDataSet 的 Active 属性后将显示数据如下图:

4.双击 Button1 输入下面的程序:

void __fastcall TForm2::Button1Click(TObject *Sender)
{
ClientDataSet1->ApplyUpdates( 0 );
}

5.至此,客户端程序也完成了,编译并运行(确定 Web App Debugger 已运行),可以看到服务端运行一会儿, 它的窗体闪现几秒钟后客户端程序即可取得数据并显示出来。现在可以通过 DBNavigate/DBGrid 对数据进行操作, 操作完成后按 Apply 按钮即可将数据修改提交到服务端,此操作会运行服务端程序。

就这样,我们只写了一行程序就完成了一个基于 SOAP 的多层数据库应用。

 

附:红色的几个接口需要注意,在WebService中IAppServer接口已经没用,而要用IAppServerSOAP 。

你可能感兴趣的:(webservice)