关于Soap,它是一种简单对象访问协议,是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。它是一种通信协议,用于Web应用程序之间的因特网通信,它提供一组不受平台和语言限制的方法使应用程序得以相互之间进行Intertnet通信。而gSoap可以看做是对soap的一个实现封装,它隐藏了在调用WebService中的大量实现细节,使得C++调用WebService变得较为简单。它提供编译工具(实际就是针对接口的WSDL生成类文件),然后引入工程操作生成类即可达到访问WebService接口的目的。仔细查看生成的文件就会发现生成的类与WebService接口的WSDL文件实际相对应的。
C/C++调用Web Service需要用到soap库,一般使用的有gsoap和axis cpp两种实现,这里使用gsoap来调用。gsoap是sourceforge上的一个开源项目,目前版本是2.7.6c,使用简单,可以在linxu、windows、mac多种平台上使用。gsoap的主页地址是http://gsoap2.sourceforge.net/
gsoap使用步骤
gsoap提供了两个有用的工具:wsdl12h.exe和soapcpp2.exe,帮助我们生成代理类。
以http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl为例讲解
操作流程
b) 打开wsdl2h.exe所在文件路径(不打开的话下面输入时要记着输入全路径,不然找不着了);
c) 输入:wsdl2h -o service.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,
d) 回车 运行吧,看提示信息,没有提示故障的话,查找service .h吧(它的保存路径如果不设置和wsdl2h.exe同一目录);
e) 得到service.h后,打开可以看到接口定义。如果要用宽字符(这样可以避免中文乱码),将该文件的std::string替换为wchar_t*然后保存
f) 在命令行中 输入:soapcpp2.exe service.h
、soapH.h、soapServer.cpp、soapServer.Lib、soapStub.h和接口的请求应答xml文件。
其中
MobileCodeWS.nsmap 为命名空间定义文件;
soapClient.cpp 客户端文件
调用MobileCodeWS Mcws;
Mcws.endpoint = url; //webservice的地址