1、2023.7电脑编程技巧与维护1WebServiceWebService具有跨语言、跨平台、可远程访问的特点,采用超文本传输协议(HTTP)来传输数据,使用XML、JSON等格式进行数据封装。在服务端,WebSer-vice可通过WSDL对外说明有哪些服务可供调用,可用于描述WebService服务及其方法、参数和返回值。在实际应用中,使用WebService技术可以屏蔽不同软件和不同平台之间的差异性,这种技术架构可以很好地实现分布式、跨平台的动态数据交换和应用集成,通过简单对象访问协议(SOAP)进行远程访问和调用,实现工作环境中的高可集成性。2gSOAPgSOAP是 一 个 可 用 于SO
2、AP和 表 述 性 状 态 传 递(REST)的XML Web服务,以及数据绑定的C/C+软件开发工具包,具有高效、可靠和灵活的特征,可用处理XML数据、开发Web服务。基于gSOAP的相关软件已应用于嵌入式系统、移动设备、大数据和云计算等领域。此外,gSOAP工具包通过自编码技术提供了C/C+XML数据绑定解决方案。为开发人员在C/C+中实现WebService服务节省了大量时间,简化了XML在C/C+应用程序中的使用。3应用示意图项目应用分为服务端和客户端两部分,主要涉及服务端接口的创建、服务端接口的具体实现、服务端服务的开启、客户端调用等。在具体开发过程中,使用MyEclipse开发工具
3、和Java语言进行服务端程序设计和开发;采用Deepin Linux操作系统,使用gcc开发套件和gSOAP进行客户端程序设计和开发。在应用中,服务端先对外发布WebService服务;客户端向服务器发送访问请求,调用服务端的WebService接口,并将需要传递的参数通过服务端的WebService接口传入;服务端通过获得的客户端数据,采用对应的WebService函数进行数据处理,并将结果返回;客户端获得服务器的运算处理结果,并将结果返回给用户。具体流程如图1所示。Linux 环境下基于 gSOAP 的 WebService 应用设计与实现严竞雄1,2,3,4(1.南通理工学院计算机与信息
4、工程学院,江苏 南通226002;2.南通市虚拟现实与云计算重点实验室,江苏 南通226002;3.南通理工学院物联网工程教研室,江苏 南通226002;4.南通理工学院计算机技术应用研究所,江苏 南通226002)摘要:WebService 具有跨平台、低耦合、自包含的特征,可以使运行在不同软、硬件上的程序进行数据交换或集成,可以使用可扩展标记语言(XML)或 JS 对象标记(JSON)进行数据的描述和传递,可用于开发分布式交互操作的应用程序。近年来,WebService 技术可使不同的平台借助 Web 应用程序进行交互,使各平台之间协同工作,提升了系统的可用性。基于 Linux 环境开发、
5、设计了一款基于 gSOAP的 WebService 应用,实践表明,该系统运行稳定、实时性强、具有良好的跨平台特性。关键词:Linux 操作系统;Deepin 操作系统;gSOAP 工具包;WebService 服务;Java 语言基金项目:2020年度江苏省高校哲学社会科学专题研究项目(2020SJA1619);2022年度南通理工学院中青年骨干教师培养(科学研究)专项(ZQNGGJS202238);2022年度南通理工学院科研项目(2022XK(K)68);2021年度教育部高校学生司第一期供需对接就业育人项目(20220102346);2021年度教育部第二批产学合作协同育人项目(202
6、102639007);2021年度南通市科技计划指令性项目(JC2021134);2021年度江苏省高等学 校 教 育 技 术 研 究 会 高 校 教 育 信 息 化 研 究 课 题(2021JSETKT070);2020年度江苏省现代教育技术研究项目(2019-R-76815);2019年度南通理工学院“课堂革命”教学改革研究专项项目(2019JJG010)。作者简介:严竞雄(1988),男,硕士,实验师,研究方向为软件工程、信息安全。图1具体流程个人计算机(PC)客户端第1步:发送WebService调用请求第2步:服务端获得请求,解析数据,并返回结果WebService服务端56DOI:
7、10.16184/prg.2023.07.0182023.7电脑编程技巧与维护4WebService 服务端开发服务端的开发可以使用相关的WebService框架完成,将具体的业务对象对外发布为WebService服务,常用的第三方框架有Axis,xfire,cxf等。这里采用JWS来实现,JWS即Java Web Service,是使用Java语言WebService服务,不需要任何第三方库,便于程序开发人员开发和部署WebService项目。服务端的开发主要涉及WebService代码的编写,主要步骤是在MyE-clipse中 新 建WebService项 目,然 后 在 项 目 中 创
8、建WebService程序文件,在WebService程序文件中引入javax.jws和javax.xml.ws.Endpoint等相应的包和类,在ServiceHello类中编写WebService服务代码。getValue函数用来对外提供WebService服务,该函数具有inta和int b两个参数,用于接收客户端发来的函数参数。getValue函数获得参数后,将两参数的值带入自定义函数中进行数据运算,并在计算得到结果后通过getValue函数返回,在Main函数中,通过Endpoint中的publish方法对外发布WebService服务,并在发布的统 一 资 源 定 位 器(URL)
9、中 绑 定 服 务 器 的IP地 址10.0.132.253和端口9000。对应代码如下。package com.web.service;import javax.jws.*;import javax.xml.ws.Endpoint;WebServicepublic class ServiceHello public int getValue(int a,int b)return a+b;/*param args*/public static void main(String args)/TODO Auto-generated methodstubEndpoint.publish(http:/
10、10.0.132.253:9000/Service/ServiceHello,new ServiceHello();System.out.println(Service Success);选中WebService工程中的ServiceHello类,运行Java应用程序,当控制台中显示Service Success时应用正常运行。WebService服务端运行效果如图2所示。在浏览器地址栏中输入网址,WSDL在线文档展示如图3所示。在该XML文件中,可以得到该Web服务器上运行的WebService服务名和相关接口信息,以便开发人员进行客户端的Web服务对接开发。5WebService 客户端开
11、发gSOAP工具提供了基于C/C+编程语言的SOAP/XML实现,从而使C/C+语言开发Web服务或客户端程序更为便捷。gSOAP支持Windows、Linux、MacOS等平台。gSOAP工具主要包括两个可执行文件:wsdl2h和soapcpp2。wsdl2h可执行文件通过读取.wsdl格式文件输出.h格式文件;soapcpp2可执行文件通过读取.h格式文件生成server和client端的框架。客户端的开发和设计基于gSOAP 2.8.97、Deepin20.9,通 过 命 令 行sudo apt-get install build-essentiallibgtk2.0-dev libgl
12、ib2.0-dev安装编译、开发工具,以及GTK+的开发文件和GLib库;通过命令行sudo apt-getinstall flex bison openssl libssl-dev安装OpenSSL和SSL开发工具包。使用configure命令检查无误后,就可以通过make和make install命令进行gSOAP的编译和安装。安装完gSOAP开发环境后,在Deepin中创建client目录,在该目录 中运行命令wsdl2h-c-o hi.h http:/10.0.132.253:9000/Service/ServiceHello?wsdl和soapcpp2图2WebService服务端运
13、行效果图3WSDL在线文档展示572023.7电脑编程技巧与维护-c hi.h。其中,参数-c的作用是生成C语言形式的代码,最终在client目录下生成ServiceHelloPortBinding.getValue.res.xml,soapClientLib.c,soapServer.c,Service-HelloPortBinding.getValue.req.xml,ServiceHelloPortBind-ing.nsmap,soapClient.c,soapServerLib.c等代码文件。分析soapStub.h头文件,可以得到structns1_getValue、struct n
14、s1_getValueResponse等结构体和SOAP_FMAC5 intSOAP_FMAC6 soap_call_ns1_getValue函数。ns1_getVal-ue结构体内有两个成员arg0和arg1,分别用来表示服务端程序getValue函数中的两个形参a和b,ns1_get-ValueResponse结构体中含有成员return_,对应服务端程 序getValue函 数 中 返 回 的 变 量。ns1_getValue和ns1_getValueResponse结构体如下所示。struct ns1_getValue/*Requ ired element arg0 of XMLsch
15、ema type xsd:int*/int arg0;/*Required element arg1 of XMLschema type xsd:int*/int arg1;struct ns1_getValueResponse/*Required element return of XMLschema type xsd:int*/int return_;SOAP_FMAC5 int SOAP_FMAC6 soap_call_ns1_get-Value函数是由gSOAP根据在线Webservice内容自动生成的,用以对接服务端的getValue函数接口。根据以上分析,可以对客户端进行C语言程序
16、的设计与编写,核心代码如下。int add(const char*server,int num1,int num2,int*sum)struct soap add_soap;int result=0;soap_init(&add_soap);soap_set_namespaces(&add_soap,names-paces);struct ns1_getValue element;element.arg0=num1;element.arg1=num2;struct ns1_getValueResponse tResult;soap_call_ns1_getValue(&add_soap,server,&element,&tResult);if(add_soap.error)printf(soap error:%d,%s,%sn,add_soap.error,*soap_faultcode(&add_soap),*soap_faultstring(&add_soap);result=add_soap.error;*sum=tResult.return_;soap_end(&add_soa