asmx web服务调用无效 参数_C++ 调用 Webservice gSoap 方法

v2-e72fd3a0de5a08c186554d9337319e32_1440w.jpg?source=172ae18b

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

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

步骤一

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

v2-df0b1e0d909093edbab6daa673f7308a_b.jpg
图1. 解压后要进入的目录

步骤二

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

打开链接是这个样子:

v2-c17047079462cc2e1915a629d0eed0bd_b.jpg
图2. xml文件

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

v2-6d37bc8907e0c73fc255294ece35aaea_b.jpg
图3. 另存为文件后的目录

步骤三

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

v2-698cc919c1f7116fcbe8e7afa132a84f_b.jpg
图4. wsmap.dat

那么SOAP/XML中的string将转换成std::wstrin或wchar_t*,这样能更好地支持中文。

步骤四

在该目录下打开cmd窗口,输入以下命令。回车后WeatherWS.h头文件

wsdl2h -s -t wsmap.dat WeatherWS.wsdl

v2-2b82a35690e96d241be864c47323bf83_b.jpg
  • -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个文件,如下图:

v2-c9689c88a88f6c6920dfed86452cb95f_b.jpg
  • -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的项目目录下,选择“添加现有项”,添加好的样子如下:

v2-9d45a6e1ca7d6bf4d03b78eb2619cdd0_b.jpg

其中的stdsoap2.hstdsoap2.cpp在gsoap_2.8.100gsoap-2.8gsoap目录下

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

#include 

错误修改

会有红色下划线错误提示

v2-c97b8cfeed594c803fe9c8792339b934_b.jpg
错误提示

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

v2-1fb4eb2fc282aab6a318486348ee2a10_b.jpg

最后的结果

v2-fe3c0e8e7fb0b39ace4a0aa755b6254f_b.jpg
最后输出

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

Enjoy!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值