gSOAP编译以及测试过程
1.下载源码。
2.编译安装。
3.测试。
1.下载源码。
直接网上下载最新的源码即可。
https://sourceforge.net/projects/gsoap2
我下载到的是2.8.111的源码。
解压后是
2.编译安装。
这个比较简单,编译安装三步走。
./configure
make
一般没有出错即可。
make install
安装成功会把相应的程序安装到当前系统。
到这里,我们开发SOAP的两个工具(wsdl2h、soapcpp2)已经安装成功。
3.测试。
这里我们有一个客户提供的一个wsdl文件,现在我们就通过这个文件来生成相应代码。
首先生成通道wsdl2h 程序生成*.h文件。命令如下
wsdl2h -o FSUService.h ./FSUService.wsdl
到这里没有什么问题的话应该会生成一个FSUService.h文件,接下来我们来生成客户端接口代码和服务器接口代码,执行如下命令
soapcpp2 -i -Iimport FSUService.h
提示成功就可以看到生成的代码了。
到这里,目前生成的都是接口代码,这个需要写相应的执行代码才行。
客户端代码
client.cpp
#include "soapFSUServiceSoapBindingProxy.h"/*包含接口代码里面客户端代码*/
#include "FSUServiceSoapBinding.nsmap"/*包含接口代码里面对应的nsmap文件*//*以下是服务器地址*/
const char server[] = "http://172.16.89.202:82/services/FSUSer/FSUService.php?wsdl";
const char server2[] = "http://172.16.89.117:8080";int main(int argc, char **argv)
{std::string str1,result;FSUServiceSoapBindingProxy test;//test.soap_endpoint = server;test.soap_endpoint = server2;str1 += "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Request><PK_Type><Name>LOGIN</Name></PK_Type><Info><UserName>admin</UserName><PassWord>21232f297a57a5a743894a0e4a801fc3</PassWord><FSUID>26201907030001</FSUID><FSUIP>172.16.88.192</FSUIP><FSUMAC>00-0c-29-de-4c-58</FSUMAC><FSUVER>1.0.01</FSUVER></Info></Request>";test.invoke(str1, result);if (test.error)test.soap_stream_fault(std::cerr);else{printf("client test\r\n");std::cout << result << std::endl;}test.destroy(); /* clean up mem */return 0;
}server.cpp#include "soapFSUServiceSoapBindingService.h"/*包含接口代码里面服务端代码*/
#include "FSUServiceSoapBinding.nsmap"/*包含接口代码里面对应的nsmap文件*/int main(int argc, char **argv)
{FSUServiceSoapBindingService test;if (argc < 2)test.serve(); /* serve as CGI application */else{int port = atoi(argv[1]);if (!port){fprintf(stderr, "Usage: FSUService++ <port>\n");exit(0);}/* run iterative server on port until fatal error */if (test.run(port)){test.soap_stream_fault(std::cerr);exit(1);}}return 0;
}
``/*实现一下wsdl文件里面的接口*/
int FSUServiceSoapBindingService::invoke(const std::string& _xmlData, std::string &_invokeReturn)
{printf("FSUServiceSoapBindingService::invoke");_invokeReturn += "FSUServiceSoapBindingService::invoke";return SOAP_OK;
}
到这里客户端和服务器测试代码写完。
进行编译之前开需要拷贝一个文件到工程里面,就是gsoap里面的stdsoap2.cpp文件
路径是gsoap-2.8/gsoap/stdsoap2.cpp
到到这里代码已经全部处理完毕,编译客户端和服务器代码。
g++ -o client client.cpp soapC.cpp soapFSUServiceSoapBindingProxy.cpp stdsoap2.cpp
g++ -o server server.cpp soapC.cpp soapFSUServiceSoapBindingService.cpp stdsoap2.cpp
编译一般没有报错也没有警告
执行测试,先开服务器。
再多一个终端执行客户端程序
执行了客户端后,能得到服务器返回的字符串即可。
到这里测试通过。
关于gSOAP工具的应用可以参考博客
https://www.cnblogs.com/hgwang/p/5840265.html
测试环境是Ubuntu1604,其他环境如果出错根据实际情况来处理,步骤也是这些。
本机测试虽然已经通过了,但还需要放到arm板测试。C++的代码,直接换编译机编译既可。
arm-linux-g++ -o client client.cpp soapC.cpp soapFSUServiceSoapBindingProxy.cpp stdsoap2.cpp
编译的时候会找不到头文件(stdsoap2.h),因为我用的编译服务器没有安装gSOAP组件,安装需要处理权限,这里不安装,直接去拷贝gsoap源码里面的gsoap-2.8/gsoap/stdsoap2.h既可
再编译既可通过
编译服务器。
arm-linux-g++ -o server server.cpp soapC.cpp soapFSUServiceSoapBindingService.cpp stdsoap2.cpp
开发过程问题整理:
一、测试过程中出现执行报
[root@NMIVV2 FSUService]# ./server 8080
./server: line 4: syntax error: unexpected word (expecting “)”)
这个是编译器错误导致的,拷贝命令的时候Linux x86的编译器没有成功替换为arm-linux-g++,这个编译是通过的,用file命令查看文件属性发现的。
二、通过网页访问SOAP服务的时候报
<?xml version="1.0" encoding="UTF-8" ?>
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tmsc="urn:tmsc">
- <SOAP-ENV:Body>
- <SOAP-ENV:Fault SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><faultcode>SOAP-ENV:Client</faultcode> <faultstring>HTTP GET method not implemented</faultstring> </SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
这个是没有实现http_get(struct soap *soap)导致的,找到生成的stdsoap2.cpp,找到里面的http_get(struct soap *soap)函数,在
DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP GET request\n"));
后面增加如下代码
FILE*fd = NULL;
fd = fopen("FSUService.wsdl", "rb"); //open WSDL file to copy
if (!fd)
{return 404; //return HTTP not found error
}
soap->http_content = "text/xml"; //HTTP header with text /xml content
soap_response(soap,SOAP_FILE);
for(;;)
{size_t r = fread(soap->tmpbuf,1, sizeof(soap->tmpbuf), fd);if (!r){break;}if (soap_send_raw(soap, soap->tmpbuf, r)){break; //cannot send, but little we can do about that}
}
fclose(fd);
soap_end_send(soap);
return SOAP_OK; //return SOAP_GET_METHOD;//原来的返回也需要屏蔽或者删除
改好重新编译执行,再访问就可以了,这个问题困扰了好一会儿,看到别人写的博文给的思路,https://www.cnblogs.com/Laokong-ServiceStation/archive/2011/04/29/2032331.html
测试结果:
Ubuntu虚拟机执行服务器,arm板执行客户端请求成功。
arm板执行服务器,Ubuntu虚拟机执行客户端请求成功。
gSOAP编译以及测试过程相关推荐
- gSOAP 在windows下的安装与使用(mingw32)
gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端.由于 gSOAP具 有相当不错的兼容性,通过gSOAP,我们就可以调用由Jav ...
- c/c++使用gsoap发布和调用webservice
预备知识 ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供.ONVIF规范涵盖了完全的XML及WSDL的定义.每一个支持ONVIF规范的终端设备均须提供与功能相应的 ...
- 第四章 源代码的下载和编译
Android移植主要就是Linux内核的移植,而Linux内核的移植主要是Linux驱动的移植.为了开发和测试Linux驱动,需在Ubuntu Linux下搭建两套开发环境:Android应用程序开 ...
- gsoap 实现 C/C++ 调用web service
gSOAP 是什么? gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供 ...
- gsoap使用方法及心得
gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在Windows.Linux.MAC OS和UNIX下使用C和C++语言编码,集成了SSL功能. 下载地址:http:// ...
- gsoap应用---利用gsoap工具生成代码
1.gsoap是什么? The gSOAP toolkit is an open source C and C++ software development toolkit forSOAP/XML W ...
- gsoap中文文档(1.介绍)
1.介绍 gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供一组API ...
- gsoap初始化释放_gSOAP中文文档
1.背景 转贴 2 gSOAP文档翻译计划 2.1 gSOAP文档翻译计划(序) 前一阵子需要在unix c平台下创建一个webservice应用.头痛之余,上网查询相关资料,偶然发现了gSOAP开发 ...
- linux gsoap交叉编译,Gsoap交叉编译
遇到问题,在按正常交叉编译过程中遇到一个问题: 如下: -/-/gsoap/src/soapcpp2: cannot execute binary file 搜了网上很多,感觉语句不通顺虽然解决了但是 ...
最新文章
- 别在 Java 代码里乱打日志了,这才是正确的打日志姿势
- jQuery快速入门专题
- Chaincode for Operators(运营商的链码手册)
- 如何选择主机操作系统?
- G1 vs CMS vs平行GC
- Bailian2746 约瑟夫问题【 约瑟夫问题】
- EXCEL等间隔数据处理
- 使用SHFileOperation操作文件
- 双击我的计算机打不开,电脑我的计算机双击打不开怎么办
- 第十六届全国大学生智能车竞赛创意组获奖名单 | 带有学生与指导教师信息
- 【win 10系统激活】
- Java不同字符使用下划线分隔_004_Java语言基础(a-变量)
- 动画效果--animation
- Unsupervised Hyperspectral Mixed Noise Removal Via Spatial-Spectral Constrained Deep Image Prior
- 笔记本html连接电视机,详细教您笔记本连接电视
- 光储充一体化充电站_光储充一体化充电站有哪些好处
- html网页文件保存rss订阅,博客RSS订阅一些优化方法
- java模拟而一个电话本操作
- android平板2018,安卓平板何处逢生?最值的平板 2018 iPad 上手体验
- 牛客网Chino with Queue【状压DP】
热门文章
- c语言行列的互换及常见的错误类型
- 蓝桥杯省赛考试注意事项和省赛资料整理
- (萌新的数电学习)用VHDL语言设计CPU
- 计算机组成原理STRA检测程序,计算机组成原理实验4-微程序控制器课件.ppt
- C语言:表格形式输出数据
- 利用GAE+WallProxy-plugins搭建个人代理服务器
- Key Points Estimation and Point Instance
- 为啥我的钉钉无法打卡拍照片
- cad完全卸载教程_如何完全卸载(删除)cad吗? _ 设计学院_设计软件教程自学网...
- Python综合评价模型(四)主成分分析法