第一步:编写服务器的应用程序
  首先在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,页面访问不到,谁看懂了说一下?

解决方案 »

  1.   

    另外想问下WebServices服务在哪里设置服务端口?找了半天没找到
      

  2.   

    http://topic.csdn.net/u/20100820/17/2dde1673-d4cd-442e-a480-3eff40753fa6.html
    高手帮忙解决下这个问题
      

  3.   

    網上一搜大把:  http://blog.csdn.net/QQ56430204/archive/2009/11/26/4875770.aspx
      

  4.   

    http://localhost/虚拟路径/Project1.exe/soap/mySoapDataModule
    另外,这个exe是不是客户端?后台一般是isapi的dll或cgi的exe
      

  5.   

    再提供一個DEMOServer 端:  SoapDataModule中加入 ADOConnection1、ADODataSet1、DataSetProvider1;DataSetProvider1的DataSet设置为ADODataSet1;ADODataSet1的CommandText设置为空,Connection设置为ADOConnection1。  DataSetProvider1的DataRequest事件:
       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;