delphi webserver

{一、编写服务端程序}

第一步:创建项目。
1,File –> New –> Other –> WebServices –> Soap Server Application。
2,默认选择“ ISAPI/NSAPI Dynamic Link Library”,然后点“OK”。
3,出现一个对话框:“Create Interface for SOAP module”,点“Yes”。
4,又出现一个对话框。在左边“Service name”那里输入要创建的WebService的名称。如果以前没有做过,可以勾选右边的“General sample methods”,产生一个简单的例子,如果做了这一步,则下面的二三步都可以省略很多。生成一个框架。后面的大部分原代码都需要自己手工添加。

第二步:定义一个接口单元。
先通过向导生成一个空的单元文件,然后在此单元中实现基本的接口(Iinvokable)和定义以后客户端程序可以调用的方法,原代码如下:

{ Invokable interface Itest }
unit testIntf;

interface

uses InvokeRegistry, Types, XSBuiltIns; //基本的结构和方法的定义都在此单元中,必须引用

type
  { Invokable interfaces must derive from IInvokable }
  Itest = interface(IInvokable) //自定义的一个结构,继承自Iinvokable
    ['{EB72FBD5-9560-42B0-8D63-0EE834722A77}'] //通过Ctrl+Shift+G生成的一个GUID

    { Methods of Invokable interface must not use the default }
    { calling convention; stdcall is recommended }
    function gettext():WideString;stdcall; //自定义的一个方法,也是以后客户可以调用的方法
  end;

implementation

initialization //初始化
  { Invokable interfaces must be registered }
  InvRegistry.RegisterInterface(TypeInfo(Itest)); //通过此方法来注册接口

end.

第三步:实现第二步中所定义的接口和方法。
先通过向导生成一个空的单元文件,然后定义自定义接口(Itest)的实现类。原代码如下:

{ Invokable implementation File for Ttest which implements Itest }
unit testImpl;

interface

uses InvokeRegistry, Types, XSBuiltIns, testIntf; //引用自定义的接口单元

type
  { Ttest }
  Ttest = class(TInvokableClass, Itest) //定义实现类,此类必须继承自TInvokableClass,并实现自定义接口
  public
    function gettext():WideString;stdcall; //申明在自定义接口中所定义的方法
  end;

implementation

function Ttest.gettext:WideString; //实现自定义方法
begin
  Result:='Success';
end;

initialization //初始化
  { Invokable classes must be registered }
  InvRegistry.RegisterInvokableClass(Ttest);

end.

第四步:编译整个应用程序,即产生一个*.dll的程序,把此程序拷贝到 IIS 的 Cgi-bin 目录下(或者自已在 IIS 中创建一个虚拟目录并指向dll所在的文件夹,在虚拟目录属性中,必须将执行权限改为:脚本和可执行文件),然后即可通过以下方式的链接访问到WSDL:http://127.0.0.1/cgi-bin/*.dll/wsdl 访问到以XML方式编码的WSDL文件了,这就是客户端程序调用需要的文件。其中*.dll为你自己的应用程序的名字。127.0.0.1为你的Web服务器地址。Cgi-bin为你的Web服务器的可以执行Cgi程序的目录名称或虚拟目录名称。

{二、编写客户端程序}

第一步:新建一个Application。

第二步:File –> New –> Other –> WebServices –> Soap Services Importer。
然后在 Wsdl or Xml Schema Location 中填入:http://192.168.1.222/cgi-bin/*.dll/wsdl/Itest,然后确定即生成了一个新的接口定义单元。

第三步:在主 Form 上放上一个按钮,并引用第二个单元(即通过Soap Services Importer自动生成的单元)。代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  testobj: Itest; //定义对象
begin
  testobj := GetItest; //创建对象
  ShowMessage(testobj.gettext); //调用方法
end;

注:本文参照了http://tech.it168.com/d/2007-09-11/200709111036923.shtml, 并对一些地方重新做了修改,去繁就简,使之更加易懂。

posted on 2012-03-15 18:56  向北™  阅读(489)  评论(0编辑  收藏  举报

导航