delphi2010\delphi XE7 开发及调试WebService 实例
使用delphi已经10多年了,一直搞桌面程序开发,对Webservice一直很陌生,近来因工作需要,学习delphi开发WebService,担心遗忘,作此笔记。 特别感谢 中塑在线技术总监 大犇
(2017.5.24编辑,添加数据库访问示例XE7)
一、delphi开发WebService
1、打开delphi,选择New--other--WebService,在右侧选择 SOAP Server Application,点击OK
2、上一步点击OK后,会出现一个提示窗口,这里选择ISAPI 动态链接库,点击OK进入下一步
3、此时会提示一个确认窗口,询问是否为SOAP模块创建接口,这样要选择YES,delphi会为您自动创建一个接口,否则自己动手写会很麻烦
4、点击YES后,delphi会提示你输入 接口服务名称,这个名称在后面就是接口名和实现此接口的类名,这里我们键入MyTest,其他选项不要动,点击 OK
5、点OK后,delphi会自动创建两个单元,一个是MyTestIntf接口单元,一个是MyTestImpl接口实现单元
6、在MyTestIntf接口单元里面,接口声明后面写入你的接口函数,这个函数就是后面给别人调用实现一定功能的函数。
注意:函数声明后面一定要加上stdcall约束参数传入方式,否则其他语言可能无法调用此接口函数
7、切换到MyTestImpl接口实现单元,发现delphi已经为我们创建好了接口实现类TMyTest,在类的声明里面写上刚才的接口函数。当然也可以写入其他函数供你的接口函数内部调用,这里我重新构造了类的Create函数及析构函数
8、保存项目,编译生成DLL文件,此时delphi编写WebService 就完成了,如此简单
9、2017年5月24日编辑,添加数据库访问功能示例(Delphi XE7下)
a、切换到webmodule单元,添加几个控件用于访问后台数据库。连接数据库,将各个组建关联起来,在query中添加sql代码,查询一些数据。
b、在类TWebModule1的public域添加一个方法GetXMLData,并实现该方法返回ClientDataset的XML数据(将query1查询到的数据通过ClientDataset转换为XML)
c、在接口单元添加一个方法,和上面第6步操作一样
d、在接口函数实现单元引用WebModuleUnit1单元,实现GetXMLData方法。在这里将TWebModule1类实例化,调用其访问数据库的方法
e、新建一个VCL项目,添加一个按钮和一个memo,在button click事件添加代码,调用接口函数
f、运行效果
注:
特别说明,在这个例子中,我将数据访问单元TWebModule类的GetXMLData方法和接口函数的GetXMLData方法弄重名了,这样容易混淆。外部客户端调用GetXMLData方法是接口的方法,不是后台数据库访问单元TWebModule的GetXMLData方法,此方法由TEchoTest类的对象在后台调用。
顺序应该是这样的:客户端通过http地址获取接口IEchoTest,后台WebService实例化类TEchoTest,客户端调用接口函数GetXMLData,此方法在TEchoTest类中被实现(TEchoTest类GetXMLData方法),在此方法中实例化TWebModule类,并调用其GetXMLData方法返回数据。
二、delphi调试WebService
1、打开IIS,新建网站,至于如何建立网站就不说了,给网站起名,选择物理路径等,把刚才编译好的DLL文件放入网站的物理目录里面
2、将新建的网站目录浏览打开
3、在网站的功能选项页,选择可执行程序映射,选择刚才的DLL文件,并在请求限制里面选择[执行],这个DLL就是IIS要调用执行的DLL
4、选择 应用程序池,把里面的 32位兼容打开(我这个版本编译出来的是32位的)和托管管道模式选择为 Classic
5、在浏览器中键入网址 http://127.0.0.1:你的网站端口,回车打开网站,此时浏览器会转到你的网站物理目录下,显示出里面的所有文件,其中有一个就是我们需要的DLL
6、点击那个DLL文件,会出现下面这个界面
7、点击WSDL,会出现如下界面。这是一个XML文档,描述WSDL的细节,浏览器地址栏中的地址是我们需要的,复制下来
8、返回delphi,新建一个VCL项目。接着选择New--other--WebService,选择WSDL importer,点击OK
9、出现一个提示窗口,键入第7步得到的WSDL网址,如果WebService不在本机,注意IP地址要修改
10、点击NEXT ---NEXT--OK,delphi会自动引入一个单元,这个单元就是WebService的接口单元,里面会自动生成一个Get开头方法,用来获取接口。
在VCL单元引用这个单元,声明一个变量,变量的类型就是接口名称
var obj:IMyTest,
obj:= getXXXXX();
obj.HelloWord('哈哈哈');
至此delphi编写WebService及调用结束。
注:第7步得到的WSDL地址很重要,如果点击WSDL出现不了XML文档,说明有问题,这个WSDL地址是不可用的,很可能的原因是网站没配置好。
delphi2010\delphi XE7 开发及调试WebService 实例的更多相关文章
- delphi2010 开发及调试WebService 实例
使用delphi已经10多年了,一直搞桌面程序开发,对Webservice一直很陌生,近来因工作需要,学习delphi开发WebService,担心遗忘,作此笔记. 特别感谢 中塑在线技术总监 大犇 ...
- Delphi XE7 开发ActiveX 及在IntraWeb下调试
最近学习DelphiXE7下Intraweb开发,Intraweb完全服务器端运行使得FastReport报表系统无法在客户端运行,当然网上也有一大堆解决方案,例如导出到PDF后,给出连接,让客户点击 ...
- [转]Axis2创建WebService实例
以下文章来自http://clq9761.iteye.com/blog/976029,作者clq9761 一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下 ...
- Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?
本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用JAVA的JAR,使用JA ...
- Axis2创建WebService实例
一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: 可以下载如下两个zip包: axis2-1.5.4-bi ...
- Delphi XE7下如何创建一个Android模拟器调试
利用Delphi XE7我们可以进行多种设备程序的开发,尤其是移动开发应用程序得到不断地加强.在实际的Android移动程序开发中,如果我们直接用android真机直接调试是非常不错.一是速度快,二是 ...
- Delphi XE7 用indy开发微信公众平台所有功能,可刷阅读,可刷赞,可加推广(除微支付)
http://www.cnblogs.com/devinlee/p/4565933.html Delphi XE7 用indy开发微信公众平台所有功能,可刷阅读,可刷赞,可加推广(除微支付) 关注作者 ...
- PHP调用Webservice实例
原文 PHP调用Webservice实例 NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService.它是一个开源软件,是完全采用PHP语言编写的.通过HTTP收发S ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
随机推荐
- js-百度地图多个标注点
以成都华誉口腔3个门诊部为例,锦江区-青羊区-高新区 html: <div class = "demo_main"> <fieldset class = &quo ...
- html移动端 -- meta-模板 + rem
第一种方式: ps 不用除以2<header> <meta charset="utf-8"> <meta name="viewport&qu ...
- PAT 甲级 1045 Favorite Color Stripe(DP)
题目链接 Favorite Color Stripe 题意:给定$A$序列和$B$序列,你需要在$B$序列中找出任意一个最长的子序列,使得这个子序列也是$A$的子序列 (这个子序列的相邻元素可以重复) ...
- 织梦dede如何去除Power by DedeCms
自从dedecms织梦系统更新到6.7日的版本,底部版权信息调用标签{dede:global.cfg_powerby/}会自动加上织梦官方的链接[Power by DedeCms ],想必很多新用户使 ...
- mac下报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
如题mac下遇到错误: 解决办法:安装mac的命令行工具CommandLineTools xcode-select --install
- 编写Web Serviceclient訪问www.webxml.com.cn提供的服务
好久没更新博客了,近期各种忙. 之前做Web Service课程的作业,当中有一个实验.实验内容如题所看到的. 以下简单说下怎样编写Web Serviceclient訪问webxml.com.cn里的 ...
- python+OpenCV进行人脸检测【转】
OpenCV的人脸检测功能在一般场合还是不错的.而ubuntu正好提供了python-opencv这个包,用它可以方便地实现人脸检测的代码. 写代码之前应该先安装python-opencv: $ su ...
- Neutron网络入门
Neutron是OpenStack核心项目之中的一个,提供云计算环境下的虚拟网络功能.Neutron的功能日益强大,并在Horizon面板中已经集成该模块.作为Neutron的核心开发人员之中的一个. ...
- 基于cucumber接口测试框架的扩展——测试框架总结之cucumber
主要功能: 1.通过fiddler抓取请求,导出xml文件. 2.解析xml文件至excel,或者手工填写excel数据. 3.根据excel中的URL中地址生成的接口集合和feature内容模板生成 ...
- String空格删除和java删除字符串最后一个字符的几种方法
1. String.trim()trim()是去掉首尾空格2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间复制代码 代码如下:Str ...