欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++笔记之【Webservice调用】的那些事

程序员文章站 2022-07-04 11:54:32
一、 前言 c++笔记之【webservice调用】的那些事,之前的文章中介绍了使用c++实现webservice的服务端和客户端的通讯,这里再介绍一下如何调用第三方的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 (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目录下会很多有文件生成,如下图:

C++笔记之【Webservice调用】的那些事

将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通讯,如果出现中文乱码怎么办,其他文章再做介绍。