gsoap 开发指南
gSOAP快速开发指南
1 简介
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。
绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。
与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。
gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。
这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。
gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP 程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。
gSOAP使编写web服务的工作最小化了。
gSOAP编译器生成SOAP的代码来序列化或反序列化C/C++的数据结构。
gSOAP包含一个WSDL生成器,用它来为你的web 服务生成web服务的解释。
gSOAP的解释器及导入器可以使用户不需要分析web服务的细节就可以实现一个客户端或服务端程序。
2 安装步骤
步骤一:下载源码包
根据搭载应用的环境的不同下载对应的gSOAP最新版本源码包,下载地址下/project/showfiles.php?group_id=52781
注:以下步骤仅针对linux
步骤二:解压源码包
步骤三:编译源码包
步骤四:完成安装
●./configure
●Make
●make install
3 快速使用指南
3.1 如何建立SOAP客户端
建立soap客户端之前,必须要具备以下几个条件
①gSOAP客户端安装完成,保证wsdl2h和soapcpp2可用
②获取服务端提供的存根例的URL,如:http://135.224.85.222:7026/services/AsigService?wsdl 存根例必须要以?wsdl或者.svc或者.asmx结尾
③保证存根例的地址在搭载soap客户端的机器上是可达的,可使用wget URL的方式验证。
3.1.1 生成C++客户端代理类
①将服务端存根例URL指向的xml报文转换.h文件,命令如下:
wsdl2h -s -o quote.h http://135.224.85.222:7026/services/AsigService?wsdl
②根据.h的内容生成相应的proxy框架代码,命令如下:
soapcpp2 -i quote.h
注:wsdl2h、soapcpp2参数说明详见
3.1.2实例
✓服务端存根例URL为http://135.224.85.222:7026/services/AsigService?wsdl 指向的xml报文的内容如下
AsigService.xml
✓使用wsdl2h工具解释生成quote.h
✓使用soapcpp2根据.h的内容生成相应的proxy框架代码
3.1.3 在代理类的基础上构建应用
代理类已经将服务端存根URL指向的xml解释成相应的功能性代码,并在代码的外围搭建了SOAP协议的实现部分,我们要运用编译生成的代理类(xxProxy.cpp,xxProxy.h)进行接口的调用并实现业务逻辑的处理,需要遵从以下几个步骤:
步骤一:根据webservice服务方提供的接口文档确定接口函数,以及入参,出参。
步骤二:根据实际的入参格式按照我们的业务逻辑拼装对应的入参,一般入参包含以下几种形式:
①入参是普通字符串
②入参是结构体指针
③入参是XML字符串
步骤三:根据实际的出参格式申请对应的内存空间,获取接口返回结果。
注:对于接口中传递的中文,需要根据服务端的编码方式进行相应的码制转换。
3.1.4 实例
确定接口函数的声明
3.2 如何建立SOAP服务端(单线程)
3.2.1编写接口头文件
//gsoap ns service name: SendWorkSheet
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://localhost/SendWorkSheet.wsdl
//gsoap ns service location: http://localhost/SendWorkSheet.cgi
//gsoap ns schema namespace: urn:SendWorkSheet
typedef char * xsd__string;
int ns__SendWorkSheet(xsd__string strWorkSheet, int *result); //接口方法
上面红色字体为必须的,需要修改的是名子SendWorkSheet与http链接,将以上文字拷贝保存到SendWorkSheet.h文件中
使用soapcpp2 -i SendWorkSheet.h (既生成服务端又生成客户端,-i表示生成proxy文件,如果需要只生成服务端,请参加具体命令参数)
自动生成如下的所有文件
3.2.2实现接口方法
在需要实现接口方法的文件中添加如下引用
#include"SendWorkSheet.nsmap"
#include"soapSendWorkSheetService.h"
添加如下实现代码
// 实现基类SendWorkSheetService(自动生成)中的webservice端发送工单接口
int SendWorkSheetService::SendWorkSheet(char *strWorkSheet, int *result)
{
char msg[1024];
memset(msg, 0, sizeof(msg));
strcpy(msg, strWorkSheet);
g_pLogFile->WriteLog(level_Info, "接收到的工单:%s", msg);
//ChooseClientSend(msg); 实现自定义处理
*result = 0; //返回参数
return SOAP_OK;
}
3.2.3启动服务
// webservice收单线程
void *ThreadListenWebService(void *para)
{
SendWorkSheetService sendWorkSheetService;
if (sendWorkSheetService.run(g_iPort)) // g_iPort为webservice通信端口
{
sendWorkSheetService.soap_stream_fault(std::cerr);
g_pLogFile->WriteLog(level_Error, "创建webservice收单线程失败");
}
pthread_exit( NULL );
return NULL;
}
3.2.4注意事项
在编译程序时,需要将gsoap安装路径下的stdsoap2.h stdsoap2.cpp文件包含在工程中。
linux gsoap 用法
linux gsoap 用法gSOAP 是一个用于开发Web 服务和SOAP 客户端/服务器应用程序的开源工具包。
它可以让开发者通过创建C/C++ 代码来构建基于SOAP 的Web服务和客户端。
在Linux 上使用gSOAP,你需要遵循以下步骤:1. 下载gSOAP 工具包:- 前往gSOAP 官方网站("gSOAP Toolkit" 下载最新版本的gSOAP 工具包。
- 解压下载的压缩包。
2. 编写服务定义文件(.wsdl 文件):- 使用你喜欢的文本编辑器,编写一个包含要实现的Web 服务的定义的 .wsdl 文件。
这个文件描述了服务的数据类型、操作和消息。
3. 生成源代码:- 打开终端,进入gSOAP 工具包的解压目录。
- 运行命令`./soapcpp2 -C -I path_to_gsoap_toolkit your_service.wsdl`,其中`path_to_gsoap_toolkit` 是gSOAP 工具包的路径,`your_service.wsdl` 是你编写的 .wsdl 文件的路径。
- 这将使用gSOAP 工具根据你的 .wsdl 文件生成C/C++ 源代码。
4. 实现Web 服务:- 在生成的源代码中,找到`your_serviceService.cpp` 文件。
- 在这个文件中,你可以实现Web 服务的操作。
你需要编辑操作的函数实现,处理接收到的请求,并返回响应。
5. 编译生成的源代码:- 在终端中,使用适当的编译器(如gcc)编译生成的源代码。
- 运行命令`gcc -o your_service your_serviceService.cpp soapC.cpp soapServer.cpp stdsoap2.cpp -lgsoap++`,其中`your_service` 是生成的可执行文件名。
- 如果编译成功,将生成一个可执行文件。
6. 启动Web 服务:- 运行命令`./your_service` 来启动Web 服务。
gsoap2.8.11实现onvif discover详细教程
感谢以下教程基本是(沙漠之鸽)给予我的指导的整理而来,他非常耐心的提供了帮助,也是受于他的分享精神,所以写下了这遍教程。
前言:做onvif的过程十分痛苦,什么wsdl,soap,webserver,全部都是没有接触过的,还好有gsoap可以用,在网上和群共享里面只有2.8.3版本实现过程,而且比较麻烦的是要自己实现probe所有细节。
在2.8.11中,wsddapi插件为我们设计好了wsdd的接口,我们要做的就是填充brobe的matches信息就可以了。
简化了开发过程,也不必用高手们做的typemap 文件,因为这些看不懂的文件让我们对做出的程序毫无信心。
生成.h文件。
我们需要从onvif官网下载wsdl文件,和onvif.xsd文件。
然后生成.h文件wsdl2h -sck -t /opt/nfshost/gsoap-2.8/gsoap/typemap.dat -o onvif.hanalytics.wsdl analyticsdevice.wsdl devicemgmt.wsdl display.wsdl event.wsdl imaging.wsdl media.wsdl ptz.wsdl receiver.wsdl recording.wsdlremotediscovery.wsdl replay.wsdl search.wsdl deviceio.wsdl这一步你会发现生成速度非常慢,还会提示找不到onvif.xsd,速度慢得原因是wsdl2h会根据wsdl中引用去网上下载一下xsd和wsdl文件,我们可以将这些文件下载到本地,然后修改wsdl中的路径。
修改之前schemaLocation是一个url,如果你放的和你onvif的wsdl文件相同的目录中,这样写就ok了,如果不是,可以写上相对路径。
修改生成的onvif.h文件增加一句#import "wsse.h",用于身份验证,具体怎么用还不知道。
gsoap编译
gsoap编译GSOAP是一款开源的C/C++软件,是一种基于SOAP的Web服务开发工具。
它可以让用户通过简单的代码,实现创建SOAP消息、IPC、Web服务和Web应用程序等功能。
用户可以使用gSOAP开发部署服务器端和客户端的应用程序。
本文将向您介绍gSOAP编译,并告诉您如何使用该工具。
第一步:下载gSOAP软件包在编译gSOAP之前,我们需要从官方网站下载gSOAP软件包。
该网站提供了多种版本的gSOAP,您可以根据自己的需要选择不同的版本。
建议您下载最新版本的gSOAP。
第二步:解压缩gSOAP软件包下载完成后,将gSOAP 软件包解压缩到您的计算机上。
如果您使用的是Linux和Unix操作系统,可以利用tar命令实现解压缩操作。
例如:$ tar xzf soapsource.tgz第三步:配置gSOAP 进入gSOAP软件包目录。
在该目录中会看到一个名为configure的文件。
Connectors目录中有可选的连接器。
可以使用的连接器有:Stdio连接器SSL连接器HTTPS连接器zlib连接器接下来,我们通过执行configure脚本来生成Makefile,执行以下命令: $ ./configure如果您需要配置gSOAP的全部选项,可以使用以下命令: $ ./configure --help第四步:编译gSOAP 在配置完gSOAP后,我们可以进入soapcpp2目录并使用make命令进行编译。
以下是命令:$ cd gsoap-<version>/gsoap$ make这会生成一个名为soapcpp2的可执行文件。
我们可以使用该文件来生成SOAP客户端和服务器端的代码。
第五步:测试gSOAP 完成编译后,您可以使用gSOAP 测试Web服务和Web应用程序。
您可以使用以下命令测试gSOAP:$ ./soapcpp2该命令将告诉gSOAP要生成客户端和服务器端代码的相关选项。
C++中gSOAP的使用详解
C++中gSOAP的使⽤详解⽬录SOAP简介gSOAP准备⼯作头⽂件构建客户端应⽤程序⽣成soap源码建⽴客户端项⽬构建服务端应⽤程序⽣成SOAP源码建⽴服务端项⽬打印报⽂SOAP测试项⽬源码总结本⽂主要介绍C++中gSOAP的使⽤⽅法,附带介绍SOAP协议的基础知识,适⽤于第⼀次使⽤gSOAP的开发⼈员。
gSOAP官⽹上的⽰例代码存在⼀些错误,对初次接触的⼈不太友好,本⽂是在官⽅⽰例的基础上进⾏了⼀些补充、改动。
SOAP简介SOAP 是⼀种简单的基于 XML 的协议,它使应⽤程序通过 HTTP 来交换信息,具体内容可以参考教程。
SOAP的本质是通过HTTP协议以XML格式进⾏数据交互,只不过这个XML格式的定义是⼤家公认的。
使⽤SOAP时需注意,SOAP的XML命名空间由于版本的不同可能存在差异(如soapevn、SOAP-ENV),在调⽤SOAP服务前最好确认服务器的XML格式。
gSOAPgSOAP 有商业版、开源版两个版本,开源版使⽤GPLv2开源协议,⽀持多个操作系统,具体内容参考或者。
gSOAP提供了⼀组编译⼯具(可以认为是代码⽣成器)和⼀些库⽂件,简化C/C++语⾔开发web服务或客户端程序的⼯作,开发⼈员可以专注于实现应⽤程序的逻辑:编译⼯具提供了⼀个SOAP/XML 关于C/C++ 语⾔的实现,能够⾃动完成本地C或C++数据类型和XML数据结构之间的转换。
库⽂件提供了SOAP报⽂⽣成、HTTP协议通讯的实现,及相关的配套设施,⽤于最终的SOAP报⽂的⽣成、传输。
本⽂使⽤的库⽂件主要是以下⼏个:stdsoap2.h、stdsoap2.cpp:HTTP协议的实现、最终的SOAP报⽂⽣成,如果是C语⾔则使⽤stdsoap2.h、stdsoap2.ctypemap.dat: wsdl2h⼯具根据wsdl⽂件⽣成头⽂件时需要此⽂件,可以更改项⽬的xml命名空间(后⾯再细说)threads.h:实现⾼性能的多线程服务器需要的⽂件,可以并发处理请求,并且在服务操作变得耗时时不会阻塞其他客户端请求准备⼯作先进⼊官⽹的,然后选择开源版本:将下载的压缩包解压(本⽂使⽤的是gsoap_2.8.117.zip),解压后的⽂件放到⾃⼰习惯的位置(推荐放到C盘)。
gsoap详细实现
gSOAP Windows下的简单实现
注意:客户端指定为8080端口,所以 服务器端只有为8080端口,客户端才 能连上。当然这个端口也可不指定, 直接输入 另外一个很重要一点就是:上述截图 中的五个函数,我们找不到他们的函 数实现部分。因为它的实现部分在服 务器端,这就很好的说明了Web服务。 客户端远程调用服务器端的应用。像 是在本地使用…….
文件路径:
gSOAP Windows下的简单实现
再次运行该命令:
gSOAP Windows下的简单实现
gSOAP Windows下的简单实现
另外:服务器端还有 -T 命令。生成
一个测试例子,以便我们按照仿照例
子写自己的程序。
生成的测试例子:
并将
两个文件拷贝到该目录
下。路径:
稍后将讲到它
的作用
gSOAP Windows下的简单实现
同理:生成客户端
gSOAP Windows下的简单实现
预备工作做足!!! 正式开始写程序:
新建工程:ServerCalc 将相关文件添加到工程中
gSOAP Windows下的简单实现
添加自己的文件: 开始写真正属于自己的东西
gSOAP Windows下的简单实现
调试编译生成可执行文件 回头来看stdsoap2.h和stdsoap2.cpp文 件:
端程序 4.理解WebService的B/S和C/S模
式
gSOAP Windows下的简单实现
谢谢!
首先将
路径下的
拷贝
到Servercalc目录下
用法:wsdl2h.exe -o 头文件名 WSDL文件 名 或URL (Linux使用wsdl2h)
基于gSOAP的WebService开发指导说明文档
基于gSOAP的WebService开发指导说明书1简介1.1目的本文通过给出gSOAP库的基本使用样例,帮助开发人员进行WebService相关的开发1.2范围本文只包含gSOAP库C++版本的基本使用样例,不包含其他高级使用或C版本的使用方式1.3名词解释1.4参考资料2准备工作2.1gSOAP库很显然,要想基于gSOAP库开发WebService应用,你需要首先获取gSOAP库。
gSOAP库是一个开源库,你可以在以下网址进行下载:/project/showfiles.php?group_id=52781如果链接失效,也可以去一个介绍gSOAP的网站上查看最新下载地址:/~engelen/soap.html本文所用的版本为(soapcpp2):下载下来以后解压缩,你会得到这么一个目录:其中gsoap目录有以下结构:注意这两个文件:stdsoap2.h和stdsoap2.cpp,我们编写gSOAP程序的时候是需要它们的。
还要注意的是bin\win32目录下的两个可执行文件:soapcpp2.exe和wsdl2h.exe,目前我们只需要soapcpp2.exe。
也就是说,要使用gSOAP,我们需三个文件:解压目录\gsoap-2.8\gsoap\ stdsoap2.h解压目录\gsoap-2.8\gsoap\ stdsoap2.cpp解压目录\gsoap-2.8\gsoap\bin\win32\ soapcpp2.exe使用gSOAP不需要在程序中添加额外的库,而是要通过工具生成并包含额外的文件。
接下来,我们通过一个实例去了解如何使用gSOAP提供的这三个文件。
3创建一个WebService服务端工程gSOAP使用了代码生成器帮助我们生成一些辅助性的框架与类,所以我们想要使用gSOAP,则需要做一些额外的工作。
下面我们就从零开始构建一个使用gSOAP的服务端工程。
3.1新建一个工程这一步没什么难度,使用VS直接新建一个工程即可。
gsoap中文文档
gsoap中文文档8.1.2 关于命名空间函数ns1__getQuote(上节提到的)中,使用了ns1__作为远程方法的命名空间。
使用命名空间是为了防止远程方法名冲突,比方多个服务中使用同一个远程方法名的情况。
命名空间前缀及命名空间名称同时也被用来验证SOAP信息的内容有效性。
存根例程通过命名空间表中的信息来验证服务返回信息。
命名空间表在运行时被取出用于解析命名空间绑定,反序列化数据结构,解码并验证服务返回信息。
命名空间表不应该包含在gSOAP预编译器所需输入的头文件中。
在18.2节中将会对命名空间表做详细介绍。
Delayed Stock Quote服务客户端的命名空间表如下:struct Namespace namespaces[] ={ // {"命名前缀", "空间名称"}{"SOAP-ENV", "/soap/envelope/"}, // 必须是第一行{"SOAP-ENC", "/soap/encoding/"}, // 必须是第二行{"xsi", "/2001/XMLSchema-instance"}, // 必须是第三行{"xsd", "/2001/XMLSchema"}, // 2001 XML 大纲{"ns1", "urn:xmethods-delayed-quotes"}, // 通过服务描述获取{NULL, NULL} // 结束};第一行命名空间是SOAP1.1协议默认命名空间。
事实上,命名空间表就是用来让程序员可以规定SOAP编码方式,能够用包含命名空间的命名空间前缀来满足指定SOAP服务的命名空间需求的。
举例来说,使用前面命名空间表中定义的命名空间前缀ns1,存根例程就可以对getQuote方法的请求进行编码。
gsoap用户手册
gsoap用户手册gSOAP是一个用于开发Web服务和XML数据处理的开源工具包。
它支持多种编程语言,包括C和C++,并提供了丰富的功能和工具来简化Web服务的开发和集成。
gSOAP用户手册是一个详细的文档,涵盖了gSOAP工具包的安装、配置、使用和高级特性等方面的内容。
用户手册通常包括以下内容:1. 安装指南,用户手册会提供安装gSOAP工具包的详细步骤,包括下载源代码、编译安装和配置环境等内容。
这部分内容通常会针对不同的操作系统和开发环境进行说明。
2. 快速入门,用户手册会介绍如何快速上手使用gSOAP工具包,包括创建一个简单的Web服务、生成客户端代码、编译和部署等内容。
这部分内容通常会包括示例代码和详细的步骤说明。
3. gSOAP基础,用户手册会介绍gSOAP工具包的基本概念和核心功能,包括如何定义和发布Web服务、如何处理XML数据、如何进行SOAP通信等内容。
这部分内容通常会涵盖gSOAP工具包的核心API和使用方法。
4. 高级特性,用户手册会介绍gSOAP工具包的高级特性和扩展功能,包括如何处理安全性、如何进行性能优化、如何集成其他协议等内容。
这部分内容通常会提供一些实际的应用场景和最佳实践。
5. 参考资料,用户手册通常会包括一些附录和参考资料,如API参考、配置文件说明、常见问题解答等内容,以方便开发者查阅和深入理解gSOAP工具包。
总的来说,gSOAP用户手册是开发者学习和使用gSOAP工具包的重要参考资料,它提供了全面而详细的内容,帮助开发者快速上手并深入理解gSOAP工具包的各项功能和特性。
希望这些信息能够对你有所帮助。
GSoap工具的安装和使用
7.4GSOAP工具的安装和使用7.4.1GSOAP安装GSOAP工具可以在WIN和UNIX两个系统平台下运行,这就使我们的程序在跨平台上有了基础。
工具的安装包可浏览其主页下载。
本DEMO的开发使用的版本为gsoap_win32_2.7.9l,工具的运行环境是Windows系统。
图7.12 Windows下的GSOAP安装包图7.13 LINUX或UNIX下的GSOAP安装包设置系统环境变量,这样可以很方便的使用GSOAP工具,如下为GSOAP的两个工具,我们将他们设置到可以在DOS下可直接使用的程序。
图7.14 GSOAP两个工具程序图7.15 GSOAP使用方法7.4.2生成客户端文件Wsdl2h.exe的参数说明参见7.5.1节图7.16 在DOS下使用wsdl2h.exe工具生成SendSMSClient.h文件图7.17 生成成功图7.18 生成的文件(短信为例)Soapcpp2.exe工具的参数说明参见7.5.2 节图7.19 根据.h生成客户端的文件图7.20 生成成功提示信息图7.21 生成的客户端文件表7.1 生成文件的说明其他文件在项目中没有使用,在此不做介绍,如需了解参看网络资料。
7.4.3生成服务端文件Wsdl2h.exe的参数说明参见7.5.1节图7.22 创建WEB SERVICE的.h文件图7.23 生成的文件Soapcpp2.exe工具的参数说明参见7.5.2 节图7.24 生成WEB SERVICE服务端文件图7.25 生成的服务端文件7.5GSOAP工具的参数soapcpp2.exe: gSOAP编译器,编译头文件生成服务器和客户端都需要的c/c++文件。
wsdl2h.exe: 编译wsdl文件生成c/c++头文件。
7.5.1wsdl2h.exe的使用wsdl2h是将wsdl定义转换成.h文件的工具。
主要有一些选项:-c代表转化成C代码。
-s代表不使用STL,取而代之需要在工程中包含stdsoap2.h和stdsoap2.cpp。
使用gsoap规避和修改onvif标准类型结构的解析
使用gsoap规避和修改onvif标准类型结构的解析使用gsoap规避和修改onvif标准类型结构的解析在软件开发和集成过程中,我们常常会遇到需要与标准接口进行交互的情况。
然而,有时这些标准接口的数据结构并不完全符合我们的需求,需要对其进行一定的规避和修改。
特别是在使用onvif标准类型结构时,可能出现一些解析上的困难,这时候我们就可以考虑使用gsoap来规避和修改这些结构,以便更好地满足我们的实际需求。
让我们来了解一下gsoap和onvif标准类型结构的基本概念。
1. 什么是gsoap?gsoap是一种用于开发基于web服务的软件的工具。
它可以帮助我们在C/C++中快速创建和部署web服务,同时支持对复杂数据类型进行序列化和反序列化。
通过gsoap,我们可以轻松地与各种标准和定制的接口进行交互,包括onvif标准接口。
2. 什么是onvif标准类型结构?onvif是一种用于网络视频设备的开放性标准,它定义了一系列用于视频监控设备之间通信的接口和数据结构。
在onvif标准中,包含了各种类型的数据结构,用于描述设备的属性、状态和控制信息。
然而,由于不同厂商的设备可能存在一定差异,有时候我们需要对onvif标准类型结构进行一定的规避和修改,以适应实际情况。
接下来,让我们来看看如何使用gsoap来规避和修改onvif标准类型结构。
3. 使用gsoap规避onvif标准类型结构在使用gsoap与onvif标准接口进行交互时,我们可能会遇到一些数据结构无法直接满足我们的需求的情况。
onvif的某个数据结构可能包含了我们不需要的字段,或者缺少我们需要的字段。
这时,我们可以借助gsoap的序列化和反序列化功能,对这些数据结构进行规避。
通过定义一个新的数据结构,并使用gsoap的序列化和反序列化功能,我们可以实现从原始的onvif数据结构到我们需要的数据结构的转换。
在这个过程中,我们可以对字段进行筛选、重命名和重组,以便更好地满足我们的实际需求。
