博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
delphi webserver
阅读量:5326 次
发布时间:2019-06-14

本文共 2451 字,大约阅读时间需要 8 分钟。

{一、编写服务端程序}

第一步:创建项目。

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;

注:本文参照了, 并对一些地方重新做了修改,去繁就简,使之更加易懂。

转载于:https://www.cnblogs.com/cnpler/archive/2012/03/15/2398522.html

你可能感兴趣的文章
day22
查看>>
计量经济与时间序列_平稳性
查看>>
SpringBoot初学(4)– JdbcTemplate和Mybatis
查看>>
java数据结构与算法(二)----栈和队列
查看>>
深入理解JavaScript系列
查看>>
【Python】Linux crontab定时任务配置方法(详解)
查看>>
php文件加载路径
查看>>
树剖||树链剖分||线段树||BZOJ4034||Luogu3178||[HAOI2015]树上操作
查看>>
短信验证码
查看>>
挨踢项目求生法则——编码篇
查看>>
Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required...
查看>>
拖拽复制
查看>>
Hadoop学习:(二)hadoop的简介
查看>>
selenium自动化测试实例
查看>>
Android使用sqlite数据库的使用
查看>>
java List 排序 Collections.sort() 对 List 排序
查看>>
jQuery选择器大全
查看>>
Surrounded Regions
查看>>
【second】Partition List
查看>>
Q&A-20180128
查看>>