大体思路是:使用gsoap生成文件,把生成的相关文件均加载到项目中调用

本文以调用天气的webservice为例子,手把手教你。

步骤一

准备gSOAP工具:将gsoap_2.8.100.zip解压,进入gsoap_2.8.100gsoap-2.8gsoapbinwin32目录下,或win64目录下。(工具可以在这个网址下载:https://sourceforge.net/projects/gsoap2/files/gsoap-2.8/

图1. 解压后要进入的目录

步骤二

准备要调用的webservice接口的wsdl地址,比如网上的查询天气接口:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

打开链接是这个样子:

图2. xml文件

右击这网页,选择“另存为”到win32目录下,直接把文件名后缀改成.wsdl,如下:

图3. 另存为文件后的目录

步骤三

在win32目录下新建一个文件”wsmp.dat“,文件内容为xsd__string = | std::wstring | wchar_t*

图4. wsmap.dat

那么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.hstdsoap2.cpp在gsoap_2.8.100gsoap-2.8gsoap目录下

在“源文件”目录下,右击新建一个.cpp文件添加main函数。空项目默认啥都没有。

#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include < string >
#include <iostream>#include <iostream>
//包含soap头文件
#include "soapH.h"
#include "soapStub.h"
#include "WeatherWSSoap.nsmap"
#include "soapWeatherWSSoapProxy.h"using namespace std;void main(int argc, char **argv)
{//WebService的请求地址const char* web_url = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx";//soap接口WeatherWSSoapProxy soap(SOAP_C_UTFSTRING);//构造输入参数_ns1__getWeather city_name;city_name.theCityCode = L"";city_name.theUserID = L"";//输出参数_ns1__getWeatherResponse weather_res;//调用接口方法getWeather int xlt = soap.getWeather(web_url, NULL, &city_name, weather_res);//判断接口返回值, SOAPOK表示成功if (xlt == SOAP_OK){// 获取返回结果ns1__ArrayOfString* aos = weather_res.getWeatherResult;// 打印返回结果int count = aos->__sizestring;for (int i = 0; i < count; i++){std::wstring a = (aos->string)[i];wcout.imbue(locale("chs"));wcout << a.c_str() << endl;}}getchar();
}


错误修改

会有红色下划线错误提示

错误提示

右击项目“属性”->c/c++->语言->符合模式,改成否。如下图:

最后的结果

最后输出

原创不易,欢迎评论,并点赞!!

Enjoy!!!

cmd 调用webservice接口_C++ 调用 Webservice gSoap 方法相关推荐

  1. SpringBoot集成Axis2,部署webservice接口并调用

    SpringBoot集成Axis2,部署webservice接口并调用 一.省略新建springboot项目过程 1.pom.xml 2.application.yml 3.准备工作做完,编写serv ...

  2. php访问微博页面,PHP调用微博接口实现微博登录的方法示例

    PHP调用微博接口实现微博登录的方法示例 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  PHP调用微博接口实现微博登录的方法示例.txt ] (友情提示:右键点 ...

  3. cmd 调用webservice接口_c# 三种方法调用WebService接口

    1.引用*.wsdl文件 WebService服务端会提供wsdl文件,客户端通过该文件生成.cs文件以及生成.dll. 注意:若服务端只提供的了URL,在URL后面加上"?wsdl&quo ...

  4. android调用web接口,Android调用webservice 接口

    以查询手机号码归属地的Web service为例,它的wsdl为 1 在Android项目中导入??Ksoap2-android jar第三方jar包?? 2 Activity代码 public cl ...

  5. linux 调用rest接口,REST调用

    1. 概述 与SOAP相比,REST WebService简化了调用,也降低了技能要求. REST 近年来已经成为最主要的 Web 服务设计模式. 事实上,REST 对 Web 的影响非常大,由于其使 ...

  6. Sentinel结合Fejgn接口,进行调用远程接口的调用和限流

    sentinel 适配了 Feign 组件.如果想使用,除了引入 sentinel-starter 的依赖外还需要 2 个步骤: 1.引入依赖 <!--feign对sentinel的支持--&g ...

  7. ios调用restful接口_Postman调用https异常解决

    Postman为开发者比较常用的api测试工具,功能强大,支持各种restful接口调试,支持文件上传和文件下载. 这里主要根据项目调用https接口出现以下异常做个简要的操作讲解: 调用接口后pos ...

  8. php 登陆微博,PHP调用微博接口实现微博登录的方法示例

    在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站.这里以微博登录为例.微博登录包括身份认证.用户关系以及内容传播.允许用户使用微博帐号登录访问第三方网站,分享内容 ...

  9. c++调用python接口_Python调用有道智云文本翻译API接口实现“智能”伪原创

    >> 开始伪原创中..\")"],[20,"\n","24:\"OL7j\"|36:131"],[20,&q ...

最新文章

  1. Web服务器和应用程序服务器有什么区别
  2. python3 中递归的最大次数
  3. 用平常心去对待不平常的事
  4. java数组的几种形式——java编程思想01
  5. 朱明亮:参与开源软件让业余时间更有意义
  6. xp故障恢复控制台和它的命令
  7. gradle 安装_如何安装Gradle
  8. cmd窗口pip显示不是内部或外部命令,也不是可运行的程序或批处理文件
  9. 解决“在eclipse中配置Tomcat时,出现Cannot create a server using the selected type的错误”的问题...
  10. python项目依赖库打包发布方法
  11. LongListSelector 控件 在 wp7 和wp8中的不同之处
  12. SQL2K数据库开发十四之表操作设置用户对表的权限
  13. php smarty配置文件,Smarty配置文件
  14. 【安卓开发】Android平台的记账本app(全部代码+room框架操作数据库+设计报告)
  15. python下载前获取文件大小
  16. 用c语言编写gps程序,GPS模拟C语言
  17. Boom 2 for Mac(音频助推器及均衡器) v1.6.7中文激活版
  18. SVN客户端详细说明
  19. mysql 数据库快速入门 数据库的发展
  20. oracle后台进程介绍,Oracle后台进程介绍

热门文章

  1. oi程序提交注意:bool
  2. 典型用户描述及进一步需求分析
  3. 显示Iframe指定位置
  4. http、TCP/IP协议与socket之间的区别
  5. LNK1136报错解决方法
  6. 计算机组成原理知识点概叙
  7. python中字符串有什么组成_python字符串操作
  8. ztree html写法,ztree.html
  9. python 钉钉机器人自定义发送文件_Python自定义钉钉机器人发送自动化结果报告...
  10. 学习编程做笔记的软件_可以在图片上做笔记的软件