手头有个项目需要调用webservice接口,选取的开发语言为c++,下面是我的预研结果:
使用gsoap工具类库,你可以通过链接去下载最新版本,按照步骤去安装(省去......无非是./configure&&make&&makeinstall)
备注:本人使用的gsoap版本为 gsoap-2.8
下面这个命令是将webservice接口文档解析到outfile.h文件中,infile.wsdl是你下载的接口文件或者直接将WSDL的URL替换也可以,后面的实例会用到;
wsdl2h -o outfile.h infile.wsdl
or
wsdl2h -o outfile.h http://www.xmethods.net/wsdl/query.wsdl
soapcpp2 -j outfile.h若你要生成纯C的接口文件,使用参数 -c:
soapcpp2 -c outfile.h
soapcpp2 -j outfile.h -I/home/***/.../import
webservice接口地址:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
此为国内手机号码归属地查询的一个接口,在网上找的,不可尽信,因为接口需要userid,我只是走个过场,SOAP正常即达到目的
wsdl2h -o mobile.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl此时你的目录中会生成mobile.h的头文件
soapcpp2 -j mobile.h -I/home/demon/gsoap-2.8/gsoap/import你可以不加-I,除非编译器找不到头文件
#include "soapMobileCodeWSSoapProxy.h" #include "MobileCodeWSSoap.nsmap" #include <iostream> using namespace std; int main() { MobileCodeWSSoapProxy proxy; _ns1__getMobileCodeInfo *info = new _ns1__getMobileCodeInfo(); info->mobileCode = new string("13488889999"); info->userID = new string("888"); _ns1__getMobileCodeInfoResponse *response = new _ns1__getMobileCodeInfoResponse(); int ret = proxy.getMobileCodeInfo(info, response); cout<<"SOAP_OK:"<<SOAP_OK<<";RET:"<<ret<<";RETMSG:"<<*(response->getMobileCodeInfoResult)<<endl; return 0; }
OBJS=test.o soapC.o soapMobileCodeWSSoapProxy.o EXE=test CPPFLAGS=-g -Wall -std=c++11 -I/home/demon/gsoap-2.8/gsoap -L/home/demon/gsoap-2.8/gsoap -lgsoap++ $(EXE):$(OBJS) g++ $^ -o $@ $(CPPFLAGS) clean: rm *.o
SOAP_OK:0;RET:0;RETMSG:http://www.webxml.com.cn
RETMSG的结果输出的http前面还有一些乱码我也没有care了,接口调试通即可,俺也没有userid