zoukankan      html  css  js  c++  java
  • GSoap的使用(调用webservice接口)

    由于本人写项目时使用到C++要调用C#写得后台服务器发布的webservice,因此抽出来了一点时间整理相关的知识如下

    gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端。由于 gSOAP具 有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SOAP服务

    下载安装包

    gsoap主页:http://sourceforge.net/projects/gsoap2

     下载解压后,可以在gsoapinwin32里 找到wsdl2h.exe和soapcpp2.exe(另外还有linux和mac版本)。

    • wsdl2h.exe的作用是根据WSDL生成C/C++风格的头 文件
    • soapcpp2.exe的作用是根据头文件自动生成调用远程 SOAP服务的客户端代码(称为存根:Stub)和提供SOAP服务的框架代码(称为框架:Skeleton),另外它也能从头文件生成WSDL文件

      服务端的接口写好以后。再写客户端的代码。在写客户端的代码之前,要利用刚刚的那两个工具和wsdl文件生成一些必要的cpp和头文件。

                  首先运行,cmd,然后打开gsoapinwin32,运行wsdl2h.exe

                   用法:

    wsdl2h -o 头文件名 WSDL文件名或URL 例子: wsdl2h -o test.h http://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<path> (you can define multiple paths separated with ';')
    则要要使用-I选项指定gSOAP的 import文件路径,这个路径是"$gsoapgsoapimport":
    soapcpp2.exe -C test.h -I D:workgsoap_2.7.13gsoap-2.7gsoapimport
    这个时候win32目录下会很多有文件生成。

    将Service1Soap.nsmap,soapC.cpp,soapClient.cpp,soapH.h,soapStub.h,
    以及gSoap工程根目录下的stdsoap2.h,stdsoap2.cpp,总共七个文件添加到客户端project中,再添加代码:

    #include "Service1Soap.nsmap"


    修改soapC.cpp,soapClient.cpp,stdsoap2.cpp的编译条件为不需要预编译头文件,gSoap不需要MFC。


    准备工作到现在就全部做好了。各位就按照自己的需要写客户端程序吧。

    其实就是调用服务器端的web method啦。

    下面在说一下他的命令:

    ,主要有两个命令。
    wsdl2h命令:
    此命令用来从WSDL文件生成c/c++头文件

     
     wsdl2h -o 头文件名 WSDL文件名或URL


    常用的其它参数:
    -o 文件名,指定输出头文件
    -n 名空间前缀 代替默认的ns
    -c 产生纯C代码,否则是C++代码
    -s 不要使用STL代码
    -t 文件名,指定type map文件,默认为typemap.dat
    -e 禁止为enum成员加上名空间前缀
    soapcpp2命令:
    此命令用来从头文件,生成SOAP服务器及客户端代码,还包括WSDL、测试用XML数据。

     soapcpp2 头文件


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

    生成的文件列表:
    soapStub.h   根据头文件生成的被修改和注释的头文件
    soapH.h  客户端和服务器端源文件引用的头文件
    soapC.c    对特定数据结构的序列号和反序列号文件
    soapClient.c  远程法的客户存根例程文件
    stdsoap2.h  stdsoap2运行时库的头文件
    stdsoap2.cpp   运行时C++的XML解析器和运行时支持例程库

     ********************************************************************************************

    在MAC环境下得配置方法

    下载gsoap源码
    解压:
    $ unzip gsoap_2.8.17.zip
    编译:
    $ cd gsoap-2.8/
    $ configure
    $ make
    $ sudo make install 

  • 相关阅读:
    Angular路由参数传递
    关于wx.redirectTo、wx.navigateTo失效问题
    深入浅出UE4网络
    UE4中Bebavior Tree中Delay及其后面代码失效的原因
    UE4中Component和Subobject的区别
    寻路优化(二)——二维地图上theta*算法的设计探索
    寻路优化(一)——二维地图上A*启发函数的设计探索
    UE4的AI学习(2)——官方案例实例分析
    UE4的AI学习(1)——基本概念
    不同机器下,游戏编程如何保证物体移动具有相同的速度
  • 原文地址:https://www.cnblogs.com/wdd-123/p/4651765.html
Copyright © 2011-2022 走看看