编程是一门艺术

raptor.zh(at)gmail.com Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

archives 存档

01 Jan - 31 Dec 2018
01 Jan - 31 Dec 2017
01 Jan - 31 Dec 2016
01 Jan - 31 Dec 2015
01 Jan - 31 Dec 2014
01 Jan - 31 Dec 2013
01 Jan - 31 Dec 2012
01 Jan - 31 Dec 2011
01 Jan - 31 Dec 2010
01 Jan - 31 Dec 2009
01 Jan - 31 Dec 2008
01 Jan - 31 Dec 2007
01 Jan - 31 Dec 2006
01 Jan - 31 Dec 2005
01 Jan - 31 Dec 2004
01 Jan - 31 Dec 2003
01 Jan - 31 Dec 2002
01 Jan - 31 Dec 2001
01 Jan - 31 Dec 2000
01 Jan - 31 Dec 1999

--

links 链接

--

C++ Builder 6 BizSnap/SOAP/WebService(3)

-- 用 SOAP 实现三层数据库应用

本文将使用 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 的多层数据库应用。

猛禽 Aug.17-02

Trackback link:

Please enable javascript to generate a trackback url

No trackbacks

评论(0)


 
   
 
  表情图标 

 


提示: 除了 <b> 和 <i> 之外,其他的Html标签都将从您的评论中去除.url或mail地址会被自动加上链接.