大体思路是:使用gsoap生成文件,把生成的相关文件均加载到项目中调用
本文以调用天气的webservice为例子,手把手教你。
步骤一
准备gSOAP工具:将gsoap_2.8.100.zip解压,进入gsoap_2.8.100gsoap-2.8gsoapbinwin32目录下,或win64目录下。(工具可以在这个网址下载:https://sourceforge.net/projects/gsoap2/files/gsoap-2.8/)
步骤二
准备要调用的webservice接口的wsdl地址,比如网上的查询天气接口:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
打开链接是这个样子:
右击这网页,选择“另存为”到win32目录下,直接把文件名后缀改成.wsdl,如下:
步骤三
在win32目录下新建一个文件”wsmp.dat“,文件内容为xsd__string = | std::wstring | wchar_t*
那么SOAP/XML中的string将转换成std::wstrin或wchar_t*,这样能更好地支持中文。
步骤四
在该目录下打开cmd窗口,输入以下命令。回车后WeatherWS.h头文件
wsdl2h -s -t wsmap.dat WeatherWS.wsdl
- -o 文件名,指定输出头文件
- -n 名空间前缀 代替默认的ns
- -c 产生纯C代码,否则是C++代码
- -s 不要使用STL代码
- -t 文件名,指定type map文件,默认为typemap.dat
- -e 禁止为enum成员加上名空间前缀
步骤五
解析WeatherWS.h,生成存根程序
在该目录下打开cmd窗口,输入以下命令。
soapcpp2 -i -C -x -L WeatherWS.h -I D:gsoap_2.8.108gsoap-2.8gsoapimport
注意D:gsoap_2.8.108gsoap-2.8gsoapimport是我的路径,根据你的路径来变。
此时会生成6个文件,如下图:
- -C 仅生成客户端代码
- -S 仅生成服务器端代码
- -L 不要产生soapClientLib.c和soapServerLib.c文件
- -c 产生纯C代码,否则是C++代码(与头文件有关)
- -I 指定import路径(此项是必要的,因前面为指定-s)
- -x 不要产生XML示例文件
- -i生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
步骤六
打开Visual Studio 2017,在里面新建一个空项目。我在这里命名为“TestWebservice”。
将文件复制到vs的项目目录下,选择“添加现有项”,添加好的样子如下:
其中的stdsoap2.h和stdsoap2.cpp在gsoap_2.8.100gsoap-2.8gsoap目录下
在“源文件”目录下,右击新建一个.cpp文件添加main函数。空项目默认啥都没有。
#include
错误修改
会有红色下划线错误提示
右击项目“属性”->c/c++->语言->符合模式,改成否。如下图:
最后的结果
原创不易,欢迎评论,并点赞!!
Enjoy!!!