当前位置: 首页 > news >正文

XE开发Linux应用(二)-Webservice

新建一个工程。选择如图。

继续输入服务名

然后就生成对应的单元。

增加linux 平台。

完善对应的单元代码

{ Invokable implementation File for Txaliontest which implements Ixaliontest }unit xaliontestImpl;interfaceuses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns, xaliontestIntf;type{ Txaliontest }Txaliontest = class(TInvokableClass, Ixaliontest)publicfunction echoname(const Value:string):string; stdcall;function sumall(const Value:integer):integer; stdcall;end;implementation{ Txaliontest }function Txaliontest.echoname(const Value: string): string;
beginresult:='你好'+value;
end;function Txaliontest.sumall(const Value: integer): integer;
vari:integer;isumall:integer;
beginisumall:=;for i :=  to value doisumall:=isumall+i;result:=isumall;
end;initialization
{ Invokable classes must be registered }InvRegistry.RegisterInvokableClass(Txaliontest);
end.
{ Invokable interface Ixaliontest }unit xaliontestIntf;interfaceuses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns;type{ Invokable interfaces must derive from IInvokable }Ixaliontest = interface(IInvokable)['{20590E4A-BF8C-41AE-A630-94D2DD38EEE1}']{ Methods of Invokable interface must not use the default }{ calling convention; stdcall is recommended }function echoname(const Value:string):string; stdcall;function sumall(const Value:integer):integer; stdcall;end;implementationinitialization{ Invokable interfaces must be registered }InvRegistry.RegisterInterface(TypeInfo(Ixaliontest));end.

编译本工程。出错了?

不要害怕,这是因为linux 上apache的引用没有加入。我们确认apache 已经在linux上安装成功。

那么我们在IDE 里面处理一下。

记住设以上的地方为True, 允许未定义的引用。

现在重新编译

OK 了

现在的任务就是在发布这个apache 模块。

这一块的内容请参照前面的文章。

配置文件如图:

启动apache.

在浏览器里面输入对应的地址,就可以显示webservice 的接口信息了。

好了,服务端搞定了。我们做一个客户端来调用一下这个服务。

直接建一个vcl application .

然后选择WDSL 导入器。

输入对应的地址。

系统会生成对应的接口文件

// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : http://192.168.1.66/xalionws/wsdl/Ixaliontest
// Encoding : utf-8
// Version  : 1.0
// (2017-4-8 21:33:51 - - $Rev: 90173 $)
// ************************************************************************ //unit Ixaliontest1;interfaceuses Soap.InvokeRegistry, Soap.SOAPHTTPClient, System.Types, Soap.XSBuiltIns;type// ************************************************************************ //// The following types, referred to in the WSDL document are not being represented// in this file. They are either aliases[@] of other types represented or were referred// to but never[!] declared in the document. The types from the latter category// typically map to predefined/known XML or Embarcadero types; however, they could also// indicate incorrect WSDL documents that failed to declare or import a schema type.// ************************************************************************ //// !:int             - "http://www.w3.org/2001/XMLSchema"[]// !:string          - "http://www.w3.org/2001/XMLSchema"[]// ************************************************************************ //// Namespace : urn:xaliontestIntf-Ixaliontest// soapAction: urn:xaliontestIntf-Ixaliontest#%operationName%// transport : http://schemas.xmlsoap.org/soap/http// style     : rpc// use       : encoded// binding   : Ixaliontestbinding// service   : Ixaliontestservice// port      : IxaliontestPort// URL       : http://192.168.1.66/xalionws/soap/Ixaliontest// ************************************************************************ //Ixaliontest = interface(IInvokable)['{A3FB1A48-1AE7-B449-16DC-42CCE1A48832}']function  echoname(const Value: string): string; stdcall;function  sumall(const Value: Integer): Integer; stdcall;end;function GetIxaliontest(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): Ixaliontest;implementationuses System.SysUtils;function GetIxaliontest(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): Ixaliontest;
constdefWSDL = 'http://192.168.1.66/xalionws/wsdl/Ixaliontest';defURL  = 'http://192.168.1.66/xalionws/soap/Ixaliontest';defSvc  = 'Ixaliontestservice';defPrt  = 'IxaliontestPort';
varRIO: THTTPRIO;
beginResult := nil;if (Addr = '') thenbeginif UseWSDL thenAddr := defWSDLelseAddr := defURL;end;if HTTPRIO = nil thenRIO := THTTPRIO.Create(nil)elseRIO := HTTPRIO;tryResult := (RIO as Ixaliontest);if UseWSDL thenbeginRIO.WSDLLocation := Addr;RIO.Service := defSvc;RIO.Port := defPrt;end elseRIO.URL := Addr;finallyif (Result = nil) and (HTTPRIO = nil) thenRIO.Free;end;
end;initialization{ Ixaliontest }InvRegistry.RegisterInterface(TypeInfo(Ixaliontest), 'urn:xaliontestIntf-Ixaliontest', 'utf-8');InvRegistry.RegisterDefaultSOAPAction(TypeInfo(Ixaliontest), 'urn:xaliontestIntf-Ixaliontest#%operationName%');end.

在主窗体放两个按钮。

implementation{$R *.dfm}uses Ixaliontest1;procedure TForm2.Button1Click(Sender: TObject);
beginshowmessage(  GetIxaliontest.echoname('xalion'));
end;procedure TForm2.Button2Click(Sender: TObject);
beginshowmessage(  GetIxaliontest.sumall().tostring);
end;

http://www.lryc.cn/news/38663.html

相关文章:

  • kubernetes实战与源码学习
  • CNCF x Alibaba云原生技术公开课 第八章 应用配置管理
  • YUV实践记录
  • 【题解】百度2020校招Web前端工程师笔试卷(第一批):单选题、多选题
  • 探索云原生技术之容器编排引擎-kubeadm安装kubernetes1.21.10(新版:针对高版本内核)
  • 2023广西自治区职业技能大赛“网络安全” 项目比赛任务书
  • Reactor模式
  • Git图解-IDEA中的Git操作
  • 在一个web应用中应该如何完成资源的跳转
  • 前缀和部分题目
  • 三天吃透MySQL面试八股文
  • Giving You A guide to learning any topic faster than 95% of people
  • (七十七)大白话MySQL是如何根据成本优化选择执行计划的?(中)
  • 原来CSS 也可以节流啊
  • UE官方教程笔记03-功能、术语、操作简介
  • BN,LN,IN,GN的理解和用法
  • Linux:epoll模式web服务器代码,代码debug
  • SpringSecurity学习(四)密码加密、RememberMe记住我
  • vue专项练习
  • 【笔试题】百度+美团
  • 【8.索引篇】
  • MySQL InnoDB存储引擎锁与事务实现原理解析(未完成)
  • P1683 入门(洛谷)JAVA
  • yocto编译烧录和脚本解析
  • Proteus 8.15安装包安装教程
  • Spring——AOP工作流程
  • c++11多线程之condition_variable、wait()、notify_one()、notify_all()的使用。
  • skywalking扩展实现 —— 监控数据的动态上报
  • 【GoF 23】23种设计模式与OOP七大原则概述
  • Java 日期时间