一、 前言
之前的文章中介绍了使用C++实现Webservice的服务端和客户端的通讯,这里再介绍一下如何调用第三方的Webservice服务。
二、 调用Webservice
假如有一个第三方的Webservice地址:http://localhost:2488/Service1.asmx,对应的wsdl文件地址为:
http://localhost:2488/Service1.asmx?WSDL。在写客户端的代码之前,要利用wsdl2h.exe和soapcpp2.exe这
两个工具和wsdl文件生成一些必要的cpp和头文件。
首先运行,cmd,然后打开gsoap\bin\win32,运行wsdl2h.exe
用法:
wsdl2h -o 头文件名 WSDL文件名或URL 例子:
wsdl2h -o test.h http://localhost:2488/Service1.asmx?WSDL可以看到win32里面多了一个test.h文件。
win32里面多了一个头文件test.h之后,在命令行里面运行soapcpp2.exe,
用法:soapcpp2.exe 头文件名
soapcpp2常用选项
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
例子:soapcpp2.exe -C test.h
如果报错:Critical error: #import: Cannot open file "stlvector.h" for reading.
Hint: use option -I<path> (you can define multiple paths separated with ';')
则要要使用-I选项指定gSOAP的 import文件路径,这个路径是"$gsoap\gsoap\import":
soapcpp2.exe -C test.h -I D:\work\gsoap_2.7.13\gsoap-2.7\gsoap\import
这个时候win32目录下会很多有文件生成,如下图:
将hellomz.nsmap,soapC.cpp,soapClient.cpp,soapH.h,soapStub.h,
以及gSoap工程根目录下的stdsoap2.h,stdsoap2.cpp,总共七个文件添加到客户端project中,再添加代码:
#include "hellomz.nsmap"
修改soapC.cpp,soapClient.cpp,stdsoap2.cpp的编译条件为不需要预编译头文件,gSoap不需要MFC。
准备工作到现在就全部做好了。各位就按照自己的需要写客户端程序吧。
其实就是调用服务器端的web method啦。
三、 结束
提供Webservice的网站:
webservice 地址:http://www.webxml.com.cn/webservices
实现Webservice,也可以使用MS的SoapToolkit的库调用webservice。
另外,C++调用gsoap实现Webservice通讯,如果出现中文乱码怎么办,其他文章再做介绍。