C++笔记之【Webservice调用】的那些事
一、 前言
c++笔记之【webservice调用】的那些事,之前的文章中介绍了使用c++实现webservice的服务端和客户端的通讯,这里再介绍一下如何调用第三方的webservice服务。
二、 调用webservice
假如有一个第三方的webservice地址:https://localhost:2488/service1.asmx,对应的wsdl文件地址为:
https://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 https://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
则要要使用-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 地址:https://www.webxml.com.cn/webservices
实现webservice,也可以使用ms的soaptoolkit的库调用webservice。
另外,c++调用gsoap实现webservice通讯,如果出现中文乱码怎么办,其他文章再做介绍。
推荐阅读
-
C++学习笔记之调用构造函数和析构函数的顺序
-
C++笔记之【Webservice通讯中文乱码】的那些事
-
C++程序员应了解的那些事(47)函数之 传入传出参数 / 默认参数
-
C++程序员应了解的那些事(36)Effective STL第6条:当心C++编译器中最烦人的分析机制 --- 调用构造函数被误认为是函数声明的问题
-
C++程序员应了解的那些事(94)之STL容器内存释放问题
-
C++程序员应了解的那些事(99)之 C++中的ODR法则
-
C++笔记之【Webservice调用】的那些事
-
C++笔记之【Webservice流程整理】的那些事
-
C++学习笔记之调用构造函数和析构函数的顺序
-
C++笔记之【Webservice通讯中文乱码】的那些事