第一步:编写服务器的应用程序
首先在Delphi的IDE中选择”File|New|Other…”,然后在WebServices页面中选择Soap Server Application图标。
然后在New Soap Server Application对话框中选择Web App Debugger executable。
点击OK按钮之后,Delphi会自动生成一个WebModule,在这个Module中会包含三个WebServices的控件。
然后然后在WebServices页面中选择Soap Server Data Module图标, OK后, Delphi 弹出Soap Data Module Wizard对话框。
在Class Name中输入类名:D6DBDataModule1. 点击OK后, Delphi会自动产生一个SOAP数据模块, 在该模块中加入TdataBase, Tquery, TdataSetProvider, 三个控件。
设置各控件的属性,跟以往的Delphi数据库应用程序的设置基本上相同, 其中, TdataSetProvider是一个DataAccess控件, 提供远程呼叫的支持。
编译执行该应用程序, 使之注册. 完成服务器端的应用程序设计.
第二步:编写客户端的应用程序
添加一个新的应用程序项目, 在Form窗体中添加TDBNavigator, TDBGrid控件。
然后添加一个数据模块, 在其中加入TSaopConnection, TclientDataSet和TdataSource控件。
其中的TSaopConnection控件就是利用SOAP协议与远程服务器端相联的接口。
http://WebServer的地址/ WebService的应用程序名称/soap/SoapServerDataModule的名称
然后设置TclientDataSet控件的属性, 设置RemoteServer的属性为TsaopConnection控件的名字, 点选ProviderName.
接下来, 在窗体所在的单元添加如下代码:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids;
type
TForm4 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Unit5,DB; //引用DataModule所在单元;
{$R *.dfm}
end.
设置TDBNavigator,TDBGri控件的DataSource的属性为dmDemo1.dsDemo1, 其中, dmDemo1是数据模块的名字, dsDemo1为数据模块中的TdataSource控件的名字。
激活TclientDataSet的Active属性为True,编译该项目组,把客户端程序复制到网络上的任一台计算机, 都可执行. 一个Web Services 的数举库应用程序例子完成。-------------------------------
上面红色标注的URL地址是什么呢?我在我机器上做好之后用这个URL试http://localhost/Project1.exe/soap/mySoapDataModule,页面访问不到,谁看懂了说一下?
首先在Delphi的IDE中选择”File|New|Other…”,然后在WebServices页面中选择Soap Server Application图标。
然后在New Soap Server Application对话框中选择Web App Debugger executable。
点击OK按钮之后,Delphi会自动生成一个WebModule,在这个Module中会包含三个WebServices的控件。
然后然后在WebServices页面中选择Soap Server Data Module图标, OK后, Delphi 弹出Soap Data Module Wizard对话框。
在Class Name中输入类名:D6DBDataModule1. 点击OK后, Delphi会自动产生一个SOAP数据模块, 在该模块中加入TdataBase, Tquery, TdataSetProvider, 三个控件。
设置各控件的属性,跟以往的Delphi数据库应用程序的设置基本上相同, 其中, TdataSetProvider是一个DataAccess控件, 提供远程呼叫的支持。
编译执行该应用程序, 使之注册. 完成服务器端的应用程序设计.
第二步:编写客户端的应用程序
添加一个新的应用程序项目, 在Form窗体中添加TDBNavigator, TDBGrid控件。
然后添加一个数据模块, 在其中加入TSaopConnection, TclientDataSet和TdataSource控件。
其中的TSaopConnection控件就是利用SOAP协议与远程服务器端相联的接口。
http://WebServer的地址/ WebService的应用程序名称/soap/SoapServerDataModule的名称
然后设置TclientDataSet控件的属性, 设置RemoteServer的属性为TsaopConnection控件的名字, 点选ProviderName.
接下来, 在窗体所在的单元添加如下代码:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids;
type
TForm4 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Unit5,DB; //引用DataModule所在单元;
{$R *.dfm}
end.
设置TDBNavigator,TDBGri控件的DataSource的属性为dmDemo1.dsDemo1, 其中, dmDemo1是数据模块的名字, dsDemo1为数据模块中的TdataSource控件的名字。
激活TclientDataSet的Active属性为True,编译该项目组,把客户端程序复制到网络上的任一台计算机, 都可执行. 一个Web Services 的数举库应用程序例子完成。-------------------------------
上面红色标注的URL地址是什么呢?我在我机器上做好之后用这个URL试http://localhost/Project1.exe/soap/mySoapDataModule,页面访问不到,谁看懂了说一下?
高手帮忙解决下这个问题
另外,这个exe是不是客户端?后台一般是isapi的dll或cgi的exe
function TDataMod.DataSetProvider1DataRequest(Sender: TObject;
Input: OleVariant): OleVariant;
begin
if ADOConnection1.Connected then
begin
ADODataSet1.CommandText := Input;
Result := DataSetProvider1.Data;
end;
end;
procedure TDataMod.SoapDataModuleCreate(Sender: TObject);
var
DataPath: string;
const
SQL :string = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\programs\Delphi7\Demos\WebServices\SOAPDataModule\Data\Tree.mdb;Persist Security Info=False';
begin
DataPath := ExtractFilePath(Application.ExeName)+ '..\Data\';
XMLTransformProvider1.XMLDataFile := DataPath + 'XML_Document.xml';
XMLTransformProvider1.TransformRead.TransformationFile := DataPath + 'ToDp.xtr';
XMLTransformProvider1.TransformWrite.TransformationFile := DataPath + 'ToXml.xtr';
try
ADOConnection1.Connected :=false;
ADOConnection1.ConnectionString:= SQL;
ADOConnection1.Connected :=true;
except
//showmessage(A_ParentPath+'Data\InfoMat.mdb 调用失败');
end;
end; Client端: SoapConnection1、ClientDataSet1;ClientDataSet1的ConnectionBroker属性为SoapConnection1,ProviderName属性为DataSetProvider1 查询记录集:
procedure TClientForm.Button1Click(Sender: TObject);
var SQL:string;
begin
if not SoapConnection1.Connected then
begin
SoapConnection1.URL:=URLList.Text+'/soap/IDataMod';
SoapConnection1.Open;
end;
SQL := Edit1.text;
with ClientDataSet1 do
begin
Data := DataRequest(SQL);
end;
end;