DELPHI通过WebService进行数据交互

WebService是一种可以跨语言和平台的数据交互模式,使用非常广泛,与JSon数据格式结合,更是当前非常流行的一种模式,本章针对DELPHI通过WebService进行数据的交互做一个相对简单例子应用。

本文使用的DELPHI 版本为:DELPHI 11

阅读目录:
1.建立WebService服务端
2.建立WebService客户端

【WebService服务端】
这一节的内容如下:
1.1 如何创建WebService服务端
1.2 创建一个客户端获取文本的调用接口
1.3 创建一个客户端存储数据的调用接口
其它说明:数据存储我们采用JSon的方式进行交互

下面进入服务端创建的正题:
1.1 如何创建WebService服务端
首先我们打开DELPHI,然后新建一个WebService服务端工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里使用VCL或FMX都可以,我最近迷上了FMX,还是用FMX吧
在这里插入图片描述
端口可以自由设置,不过设置以后最好点一下测试,万一端口没打开呢,标准是8080,但我建议换一个
在这里插入图片描述
创建完成后,在弹出的对话框中选择“YES”,然后输入Service的名称后点OK,软件会自动创建单元文件
在这里插入图片描述

在这里插入图片描述
到当前为止,我们的服务端就创建好了,不过是个空的服务端,什么接口都没有,但我们可以运行一下看看
在这里插入图片描述
在上面的界面中,点击Star运行服务,然后我们可以点击按钮“Open Browser”,看看成功了没?
在这里插入图片描述
结果:成功了,只是没有被调用的接口,但服务已建立,下面开始创建接口函数

1.2 创建接口函数

在这里我决定创建两个函数,一个输出文本给客户端调用,另一个接口用来给客户端存储数据,数据交互的方式为JSon

我们给第一个函数命名为:GetTestWord,用来给客户端调用显示文本。
我们给第二个函数命名为:SaveDataInf,用来给客户端保存数据

下面先解决第一个函数
第一步:我们在MyServerIntf单元创建函数名称,注意函数后面的stdcall不可缺少
在这里插入图片描述
第二步:在MyServerImpl单元中,实现函数的功能,这里注意声明的地方,要放在Public里面
在这里插入图片描述
然后我们运行服务端,并Star,然后点击 Open Browser,可以发现我们创建的函数已存在
在这里插入图片描述

在这里插入图片描述
好了,我们第一个函数创建完成,为了避免麻烦,我们把第二个函数也一起完成后,再来建立客户端

我们转到WebModuleUnit模块,在这里放上连接数据库的相关控件,大概如下:
至于数据库如何连接,我这里不做说明,我相信这个大家基本都懂
在这里插入图片描述
因为要存储数据,所以有些前提条件必须要做好说明
本案例一些相关的前提条件如下:
数据库类型:MSSQL
数据表名称:UserInf
数据表字段:UserN,PWD,GroupName,NickName四个字段
数据交互格式:JSon(内容也是按字段进行),这里有个非常重要的地方,JSon格式与内容必须服务端与客户端要统一,否则就要出错。

好了,前提条件说完了,我们先创建一个数据保存的内部函数先,此函数建立在WebModuleUnit单元中
注意,因为是使用JSon,所以我们要引用system.JSON单元,大体如下:

在这里插入图片描述

在这里插入图片描述
上面创建的函数只是内部函数,还不能被客户端调用,所以我们接下来还要做两个动作,这跟我们创建第一个函数的方法一样
我们转到MyserverIntf单元中,创建一个新的函数名称,我们这里暂定为:SaveDataInf
在这里插入图片描述

接下来在MyServerImpl单元中,编写此函数的对外功能,用来给客户端调用保存数据

首先在此单元先引用WebModuleUnit单元
在这里插入图片描述

这一个动作为了使新手朋友们能看懂,我大概做个简单说明:
1.此函数传入的参数“str”主是客户端调用时传入的JSon文本
2.保存数据的功能因为在WebModuleUnit单元中已创建,所以这里引用就可以了

好了,到当前为止,我们服务端正式完成,F9运行并Star服务,不要关闭,我们开始设计客户端

【WebService客户端】

首先,我们新建一个工程,VCL或FMX都可以,看你喜欢,我是一如既往的FMX。
然后界面大概设计成下面图片的样子
在这里插入图片描述
接下来,导入WSDL
在这里插入图片描述
在这里插入图片描述
在这里输入服务端调用的地址。

什么?不知道地址哪里可以找到?

答案:可以在服务端看到复制就可以了,点击服务端的Open Browser,里面可以看到地址,如下图
在这里插入图片描述
在这里插入图片描述
当然,如果您的服务端是放在远程电脑上,那么Localhost就必须改成远程电脑的IP或域名

我们接着操作下一步,下面基本不需要操作什么,一路下一步完成即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存单元后,我们就可以在客户端操作了

首先,我们尝试调用服务端建立的第一个函数:GetTestWord
我们把这个函数的调用功能给下面图片的按钮,并且代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们来测试一下,看看是否成功
在这里插入图片描述
OK,第一个函数调用成功

接着我们调用第二个函数来保存数据
我们建立了四个Edit来分别输入数据表四个字段的内容,但我们在保存前,需要将四个字段内容转换成JSon文本并输入到Memo中,具体操作如下:
在这里插入图片描述

procedure TForm2.Button2Click(Sender: TObject);
varMyJson:TJSONObject;MyResult:Boolean;
begintryMyJson:=TJSONObject.Create;MyJson.AddPair('UserN',Edit1.Text);MyJson.AddPair('PWD',Edit2.Text);MyJson.AddPair('GroupName',Edit3.Text);MyJson.AddPair('NickName',Edit4.Text);Memo1.Text:=MyJson.ToString;finallyMyJson.Free;end;
end;

按上面的代码,我们将四个EDIT内容转换成了JSon文本,然后我们就可以把JSon文本通过WebService传递给服务端进行数据保存
在这里插入图片描述

procedure TForm2.Button4Click(Sender: TObject);
varStr:string;
beginstr:=MyWeb.SaveDataInf(Memo1.Text);ShowMessage(Str);
end;

然后我们看看数据保存成功了没有?
在这里插入图片描述
数据保存成功,这里显示两条,是因为我点了两次保存

好了,WebService的数据交互基本就实现的差不多了,接下来还有最最重要的一个环节

【标准得瑟环节】

本文介绍的够不够详细,如果对您有用,请叫我雷锋。

还是那句经典名言:能给新人看懂的教程才是好教程

得瑟结束,文章内容结束,但分享远没有结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf文件怎么编辑?分享3个专业的pdf软件!

在数字化时代,PDF文件已成为我们工作、学习中的得力助手。然而,面对需要修改的PDF文件,许多人却感到无从下手。今天,就让我们一起探索如何轻松编辑PDF文件,并介绍几款实用的编辑软件,让你轻松应对各种PDF编…

创建型模式 (Python版)

单例模式 懒汉式 class SingleTon:# 类属性_obj None # 用来存储对象# 创造对象def __new__(cls, *args, **kwargs):# 如果对象不存在,就创造一个对象if cls._obj is None:cls._obj super().__new__(cls, *args, *kwargs)# 返回对象return cls._objif __name__…

OpenAI宫斗剧番外篇: “Ilya与Altman联手对抗微软大帝,扫除黑恶势力”,“余华”和“莫言”犀利点评

事情是这样的。 小编我是一个重度的智谱清言用户,最近智谱清言悄悄上线了一个“划词引用”功能后,我仿佛打开了新世界的大门。我甚至用这个小功能,玩出来了即将为你上映的《OpenAI宫斗剧番外篇》。 3.5研究测试:hujiaoai.cn 4研…

@Controller和@RestController区别

一、Controller 注解: Controller 注解用于定义一个控制器类,通常配合 Spring MVC 框架使用。 控制器类负责处理用户的 HTTP 请求,并将处理结果返回给客户端。 控制器类中的方法通常通过 RequestMapping 或其衍生注解来映射特定的 URL 请求…

Python中的数据类型转换

文章目录 一、转成整数形式二、转成浮点数形式三、转成字符串形式四、转成列表形式五、转成元祖形式六、json和字典转换1.json转字典2.字典转json 一、转成整数形式 使用int()方法,示例代码如下: a 5201314 result int(a) print(result) print(type(…

蓝牙Classic加密算法设计和实现,SAFER+,E0,E1,E2,E3(python)

概述 之前用python给大家实现了所有LE相关加密工具算法。bobwenstudy/BluetoothCryptographicToolbox: LE SMP加密算法设计和实现(python) (github.com),最近重温了下Classic加密,顺便将Classic所有加密算法给实现了一遍。 在蓝牙Classic Spec中&#…

5.14.3 UNETR:用于 3D 医学图像分割的 Transformers

具有收缩和扩展路径的全卷积神经网络 (FCNN) 在大多数医学图像分割应用中表现出了突出的作用。在 FCNN 中,编码器通过学习全局和局部特征以及上下文表示来发挥不可或缺的作用,这些特征和上下文表示可用于解码器的语义输出预测。 在FCNN中,收缩…

对列表进行统计和计算

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python的列表提供了内置的一些函数来实现统计、计算的功能。下面介绍几种常用的功能。 (1)获取指定元素出现的次数 使用列表…

数字水印 | 图像标准化论文:Digital Watermarking Robust to Geometric Distortions(二)

目录 C 变换参数的确定D 水印的影响E 可替代的标准化过程 🤖原文: Digital Watermarking Robust to Geometric Distortions 🤖前言: 这是一篇 2005 年的 SCI 一区 CCF-A,但是网上关于它的讲解貌似挺少的。文中提出…

智能车竞赛指南:从零到一,驶向自动驾驶的未来

智能车竞赛指南:从零到一,驶向自动驾驶的未来 一、智能车竞赛概览1.1 竞赛介绍1.2 竞赛分类 二、智能车开发技术基础2.1 硬件平台2.2 软件开发 三、实战案例:循线小车开发3.1 系统架构3.2 代码示例 四、技术项目:基于ROS的视觉导航…

FedSyn: Synthetic Data Generation using Federated Learning

arxiv2022,没找到是哪个刊物的,是没投中吗? 这篇是用GAN做数据生成,每个client都训练一个生成器,加噪声传到server端聚合,实验是衡量生成图片的质量。 论文地址:arxiv code:没找到 贡献 提出了提出了一种新颖的方法(FedSyn ),将联邦学习、使用 GAN的合成数据生成…

高中数学:平面向量-数量积(向量与向量的乘积)与投影

一、引题 物理上的力做功 二、数量积与投影 1、数量积 θ的范围是[0,π] 2、投影 向量的投影,依然是一个向量! 3、运算法则 易错点: 4、重要性质 这里对性质(2)要注意一下:如果 a → \mathop{a}\limits ^{\rightarrow…

AWS安全性身份和合规性之Shield

shield:盾(牌);(保护机器和操作者的)护罩,防护屏,挡板;屏障;保护物;(警察的)盾形徽章;保护人;掩护物;盾形纹徽;盾形奖牌; AWS Shield是一项AWS托管的DDoS(Distributed Denial of Service,分布式…

建模:Maya

一、常用按键 1、alt 左键 —— 环绕查看 2、alt 中键 —— 拖动模型所在面板 3、空格 —— 进入三视图模式;空格 左键按住拖动 —— 切换到对应视图 二、骨骼归零 1、T Pose 旋转模式,点击模型,摆好T姿势即可 2、复制模型设置200距离…

[AIGC] Java CompletableFuture:简介及示例

Java 8 引入了一个名为 CompletableFuture 的新库,正如其名称所示,该库提供了一种名为 “Completable Future” 的新 API,其主要目的是支持异步编程,并通过可搜索的操作将这些异步操作进行聚合管控。 文章目录 CompletableFuture …

LeetCode热题100—普通数组

53.最大子数组和 题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2…

【Linux】进程信号及相关函数/系统调用的简单认识与使用

文章目录 前言一、相关函数/系统调用1. signal2. kill3. abort (库函数)4. raise (库函数)5. alarm 前言 现实生活中, 存在着诸多信号, 比如红绿灯, 上下课铃声…我们在接收到信号时, 就会做出相应的动作. 对于进程也是如此的, 进程也会收到来自 OS 发出的信号, 根据信号的不同…

【ARM 嵌入式 C 入门及渐进 6.1 -- ARMv8 C 内嵌汇编写系统寄存器的函数实现】

请阅读【嵌入式开发学习必备专栏】 文章目录 ARMv8 C 内嵌汇编写系统寄存器 ARMv8 C 内嵌汇编写系统寄存器 在ARMv8架构下,使用C语言结合内嵌汇编实现将一个值写入特定系统寄存器的函数可以按照下面的方法进行。 下面这个示例展示了如何将一个uint64_t类型的值写入…

[OpenGL] 法线贴图

目录 一 为什么要使用法线贴图 二 二种不同法线方式的使用 2.1 插值法线 2.1 法线贴图 本章节源码 点击此处 一 为什么要使用法线贴图 法线贴图我们可以使用更少的顶点表现出同样丰富的细节。高精度网格和使用法线贴图的低精度网格几乎区分不出来。所以法线贴图不仅看起来…

UE5中搭建一个简单的海岛

本文将用UE的WaterSystem与地形搭建一个简单的海岛,通过WaterSystem的参数设置,可以更好的自定义海岸线等效果。 1.基础风貌 1.1.首先新建一个Basic基础场景,切换到地形编辑模式刷出一块高地,用于沙滩。 1.2.引入UE官方插件Wat…