近期有一个项目要与第三方做系统对接,对方系统是采用WebService接口。因为我这里是采用Linux做为服务器,需在Linux下完成WebService接口的调用,通过万能的Google和百度和近四个小时的不休不眠,终于调通。
在Linux调试WebService,我采用了第三方gSOAP工具,这是网上绝大部分人采用的方法。通过gSOAP调用WebService,在掌握相关操作步骤后,其实是很简单的,只是万事开关难,而且网上提供的资料不完整,导致花费了较多的时间,为了让新人能尽快掌握调用方法,少走弯路,特将本次的经验进行分享。
为了保证一次调试成功,在不清楚流程的情况下,建议在测试时gsoap解压目录、安装目录、生成的调用文件名都按本测试程序要求做。
一、准备工作
1、Linux操作系统。我调试是在虚拟机下安装的Linux5.6 64位操作系统进行调试的。
2、下载gSOAP工具包,我采用的gsoap2.8,可在我的资源中进行下载,下载地址http://download.csdn.net/detail/aryao/6444057
3、本次调试测试程序的源码下载地址:http://download.csdn.net/detail/aryao/6444119,可以没有安装gsoap环境上进行编译和测试。
二、安装gSOAP
1、将下载的gsoap解压到linux目录,假定解压目录为:/root/gsoap-2.8/
2、进入/root/gsoap-2.8/,依次执行以下三条命令即可完成gSOAP安装,假定gSOAP安装目录为:/usr/local/gsoap/
./configure --prefix=/usr/local/gsoap
make
make install
三、根据gsoap工具,生成调用WebService的C++代码
1、本次测试的WebService调用地址为:http://www.cs.fsu.edu/~engelen/calc.wsdl,按照以下命令,生成调用代码
mkdir /callwebservice
cd /callwebservice
/usr/local/gsoap/bin/wsdl2h -s -o calc.h http://www.cs.fsu.edu/~engelen/calc.wsdl --calc.h为生成的调用头文件,可以按实际改名
/usr/local/gsoap/bin/soapcpp2 -j -x calc.h --calc.h文件必须与前面生成的一致
注:以上操作选项是生成C++的调用方式,如果要生成纯C的调用文件,请查找wsdl2h、soapcpp2的使用说明
2、执行完以上命令,便在/callwebservice目录下生成以下文件
calc.h calc.nsmap soapcalcProxy.cpp soapcalcProxy.h soapcalcService.cpp soapcalcService.h soapC.cpp soapH.h soapStub.h
3、将gsoap解压包中的stdsoap2.cpp、stdsoap2.h复制到/calwebservice目录,此步骤很重要,缺少会导致编译错误。
cp /root/gsoap-2.8/gsoap/stdsoap2.cpp ./
cp /root/gsoap-2.8/gsoap/stdsoap2.h ./
四、编写测试程序
1、建立Main.cpp调用文件,文件内容如下:
#include
#include "calc.nsmap"
#include "soapcalcProxy.h"
int main(void)
{
printf("webservice call test!\n");
calcProxy service;
double result;
if(service.pow(2, 10, result) == SOAP_OK)
{
std::cout << "2^10 = " << result << std::endl;
}else{
printf("call pow fail!\n");
}
if(service.add(100, 150, result) == SOAP_OK)
{
std::cout << "100 + 150 = " << result << std::endl;
}else{
printf("call add fail!\n");
}
return 0;
}
2、建立Makefile编译文件,内容如下:
OBJS=soapC.o stdsoap2.o soapcalcProxy.o Main.o
CC=g++
default:$(OBJS)
$(CC) $(OBJS) -o wbstest
clean:
rm $(OBJS) wbstest
3、运行make进行编译,然后进行测试
make
./wbstest
看完以上步骤,在linux下调用WebService是不是很简单,马上动手试试吧。
本次例程的源码下载地址:http://download.csdn.net/detail/aryao/6444119,经测试发现,通过wsdl2h、soapcpp2生成调用文件后,将程序拷贝到没有安装gSOAP环境的电脑上进行编译测试,一样通过。这情况说明安装gsoap工具的目的只是生成调用文件,生成后的调用文件完全不需要gsoap环境即可进行编译和使用。