您的位置:首页 > 编程语言 > C语言/C++

c++使用gsoap访问webservice

2016-09-21 17:05 459 查看
之前介绍一下用web引用访问webservice,比较简单 ,使用的也比较多,现在介绍一个使用gsoap工具来访问,比较老的技术了,动态访问比较灵活,个求所需吧。其实这两种方法最底层的工作都不需要我们做,都是使用代理类来实现通信 收发的,只不过就是gsoap暴露的更多一些,web引用封装的更严实一点

1、首先要去下载一个gsoap工具 地址 http://sourceforge.net/projects/gsoap2/files/

2、下载解压以后在D:\gsoap_2.8.35\gsoap-2.8\gsoap\bin\win32 目录下有wsdl2h.exe和soapcpp2.exe两个可执行文件

3、进入到该目录运行 wsdl2h.exe文件 ,运行之前要获得服务的wsdl文件,如果你只有地址,可以在后面直接加上?wsdl即可获得,在浏览器中输入该地址可以浏览其中的服务及使用方法 例如:http://192.168.1.108/WebService1.asmx?wsdl
 




然后运行wsdl2h -o webtest.h http://192.168.1.108/WebService1.asmx?wsdl
  即可生成名为webtest.h的头文件,该头文件是生成代理类的中间文件,我们在工程中是不用的




wsdl2h常用选项:

    -o 文件名,指定输出头文件

    -n 名空间前缀 代替默认的ns

    -c 产生纯C代码,否则是C++代码

    -s 不要使用STL代码

    -t 文件名,指定type map文件,默认为typemap.dat

    -e 禁止为enum成员加上名空间前缀 type map文件用于指定
4、然后运行soapcpp2.exe生成工程中使用的文件
soapcpp2
-I D:\gsoap_2.8.35\gsoap-2.8\gsoap\import webtext.h  就生成了一堆文件  当然也可以使用选项只生成相关文件





soapcpp2常用选项

-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。



这是比较重要的几个文件  

5、新建工程添加文件

在gsoap目录下拷贝stdsoap2.c、stdsoap2.h到新建的C++项目文件下,再把gsoap\bin\win32目录生成好的soapC.c、soapClient.c、soapH.h、soapStub.h、WebService1Soap.nsmap拷贝到新建的C++项目文件下
  由于我的工程比较大代码就不外贴了

下面给出一个可以参考的例子,使用方法一样

#include<stdio.h>
#include"UserInfoSoap.nsmap"
#include"soapStub.h"
int main()
{
int iRet;
struct soap userinfoSoap;
struct _ns1__HelloWorld helloWorld;
struct _ns1__HelloWorldResponse helloWorldResponse;
const char *pcAddr="http://localhost:31749/UserInfo.asmx?WSDL";
helloWorld.str= "LiGengMing";
soap_init(&userinfoSoap);
iRet=soap_call___ns1__HelloWorld(&userinfoSoap,pcAddr,NULL,&helloWorld,&helloWorldResponse);
if(iRet!=0)
{
printf("读取数据失败");
}
else
{
printf("读取数据成功:%s",helloWorldResponse);
}
soap_destroy(&userinfoSoap);
soap_end(&userinfoSoap);
soap_done(&userinfoSoap);
getchar();
return 0;
}

使用过程中查看比较多的是soapClient.c  soapStub.h
文件  上面给出的例子与我使用的 在名称上有点不同

_ns1__HelloWorld  都改成了_tempuri__<span style="line-height: 25.2px; font-family: Verdana, Arial, Helvetica, sans-serif;">HelloWorld   这个跟gsoap版本有关  不在赘述,  可以从外部获得服务地址,灵活运用</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: