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.pswp.cn/diannao/13733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13733.shtml
英文地址,請注明出處:http://en.pswp.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…