delphi2010\delphi XE7 开发及调试WebService 实例

使用delphi已经10多年了,一直搞桌面程序开发,对Webservice一直很陌生,近来因工做须要,学习delphi开发WebService,担忧遗忘,做此笔记。 特别感谢 中塑在线技术总监 大犇 
(2017.5.24编辑,添加数据库访问示例XE7)
1、delphi开发WebService

一、打开delphi,选择New--other--WebService,在右侧选择 SOAP Server Application,点击OK
 
图片 


二、上一步点击OK后,会出现一个提示窗口,这里选择ISAPI 动态连接库,点击OK进入下一步

图片 


三、此时会提示一个确认窗口,询问是否为SOAP模块建立接口,这样要选择YES,delphi会为您自动建立一个接口,不然本身动手写会很麻烦

图片 


四、点击YES后,delphi会提示你输入 接口服务名称,这个名称在后面就是接口名和实现此接口的类名,这里咱们键入MyTest,其余选项不要动,点击 OK

图片


五、点OK后,delphi会自动建立两个单元,一个是MyTestIntf接口单元,一个是MyTestImpl接口实现单元

图片


六、在MyTestIntf接口单元里面,接口声明后面写入你的接口函数,这个函数就是后面给别人调用实现必定功能的函数。
注意:函数声明后面必定要加上stdcall约束参数传入方式,不然其余语言可能没法调用此接口函数

图片


七、切换到MyTestImpl接口实现单元,发现delphi已经为咱们建立好了接口实现类TMyTest,在类的声明里面写上刚才的接口函数。固然也能够写入其余函数供你的接口函数内部调用,这里我从新构造了类的Create函数及析构函数

图片



八、保存项目,编译生成DLL文件,此时delphi编写WebService 就完成了,如此简单 

图片
九、2017年5月24日编辑,添加数据库访问功能示例(Delphi XE7下)
a、切换到webmodule单元,添加几个控件用于访问后台数据库。链接数据库,将各个组建关联起来,在query中添加sql代码,查询一些数据。
web

 

b、在类TWebModule1的public域添加一个方法GetXMLData,并实现该方法返回ClientDataset的XML数据(将query1查询到的数据经过ClientDataset转换为XML)sql

 

 

c、在接口单元添加一个方法,和上面第6步操做同样数据库

 

 

d、在接口函数实现单元引用WebModuleUnit1单元,实现GetXMLData方法。在这里将TWebModule1类实例化,调用其访问数据库的方法浏览器

 

 

e、新建一个VCL项目,添加一个按钮和一个memo,在button click事件添加代码,调用接口函数函数

 

 

f、运行效果学习

 

注:网站

特别说明,在这个例子中,我将数据访问单元TWebModule类的GetXMLData方法和接口函数的GetXMLData方法弄重名了,这样容易混淆。外部客户端调用GetXMLData方法是接口的方法,不是后台数据库访问单元TWebModule的GetXMLData方法,此方法由TEchoTest类的对象在后台调用。spa

顺序应该是这样的:客户端经过http地址获取接口IEchoTest,后台WebService实例化类TEchoTest,客户端调用接口函数GetXMLData,此方法在TEchoTest类中被实现(TEchoTest类GetXMLData方法),在此方法中实例化TWebModule类,并调用其GetXMLData方法返回数据。
2、delphi调试WebService

 一、打开IIS,新建网站,至于如何创建网站就不说了,给网站起名,选择物理路径等,把刚才编译好的DLL文件放入网站的物理目录里面

图片 

二、将新建的网站目录浏览打开

图片


三、在网站的功能选项页,选择可执行程序映射,选择刚才的DLL文件,并在请求限制里面选择[执行],这个DLL就是IIS要调用执行的DLL

图片

图片


四、选择  应用程序池,把里面的 32位兼容打开(我这个版本编译出来的是32位的)和托管管道模式选择为  Classic

图片


五、在浏览器中键入网址 http://127.0.0.1:你的网站端口,回车打开网站,此时浏览器会转到你的网站物理目录下,显示出里面的全部文件,其中有一个就是咱们须要的DLL

图片


六、点击那个DLL文件,会出现下面这个界面

图片



七、点击WSDL,会出现以下界面。这是一个XML文档,描述WSDL的细节,浏览器地址栏中的地址是咱们须要的,复制下来

图片
 

八、返回delphi,新建一个VCL项目。接着选择New--other--WebService,选择WSDL importer,点击OK

图片


九、出现一个提示窗口,键入第7步获得的WSDL网址,若是WebService不在本机,注意IP地址要修改

图片


十、点击NEXT ---NEXT--OK,delphi会自动引入一个单元,这个单元就是WebService的接口单元,里面会自动生成一个Get开头方法,用来获取接口。
在VCL单元引用这个单元,声明一个变量,变量的类型就是接口名称  3d

var  obj:IMyTest,调试

obj:= getXXXXX();

 obj.HelloWord('哈哈哈');至此delphi编写WebService及调用结束。注:第7步获得的WSDL地址很重要,若是点击WSDL出现不了XML文档,说明有问题,这个WSDL地址是不可用的,极可能的缘由是网站没配置好。