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 就生成了一堆文件 当然也可以使用选项只生成相关文件
-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++项目文件下
由于我的工程比较大代码就不外贴了
下面给出一个可以参考的例子,使用方法一样
使用过程中查看比较多的是soapClient.c soapStub.h
文件 上面给出的例子与我使用的 在名称上有点不同
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>
相关文章推荐
- c++访问webservice(gsoap简单使用)
- C++使用gsoap实现客户端访问webservice服务,概念知识普及
- C++使用gsoap创建webService
- c/c++ 使用gsoap调用webservice
- VS2010使用c++、gSOAP调用WebService 图文教程
- C++调用gSoap编写的WEBSERVICE与C#.NET间接口自定义结构体不能重复使用
- C++访问WebService(gSoap方式和com组件方式)
- C++访问WebService(gSoap方式和com组件方式)
- mssoap与gsoap访问WebService的使用
- VS2010使用c++、gSOAP创建WebService 图文教程
- c/c++使用gsoap发布和调用webservice
- C++使用gSoap调用C#写的webservice中文乱码问题
- VS2010使用c++、gSOAP创建WebService 图文教程
- VS2010使用c++、gSOAP创建WebService 图文教程
- C++使用gsoap调用webservice接口
- C++中如何使用gsoap开发WebService
- C++中如何使用gsoap开发WebService
- 使用C/C++程序通过gSOAP调用WebService
- C++中使用soap toolkit访问webService详解