{一、编写服务端程序}
第一步:创建项目。
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;interfaceuses 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;implementationinitialization //初始化 { Invokable interfaces must be registered } InvRegistry.RegisterInterface(TypeInfo(Itest)); //通过此方法来注册接口end.
第三步:实现第二步中所定义的接口和方法。
先通过向导生成一个空的单元文件,然后定义自定义接口(Itest)的实现类。原代码如下:{ Invokable implementation File for Ttest which implements Itest }unit testImpl;interfaceuses InvokeRegistry, Types, XSBuiltIns, testIntf; //引用自定义的接口单元type { Ttest } Ttest = class(TInvokableClass, Itest) //定义实现类,此类必须继承自TInvokableClass,并实现自定义接口 public function gettext():WideString;stdcall; //申明在自定义接口中所定义的方法 end;implementationfunction 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;
注:本文参照了, 并对一些地方重新做了修改,去繁就简,使之更加易懂。