C++利用gsoap调用webservice

来源:互联网 发布:南风知我意晋江书包网 编辑:程序博客网 时间:2024/05/22 13:38

关于Soap,它是一种简单对象访问协议,是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。它是一种通信协议,用于Web应用程序之间的因特网通信,它提供一组不受平台和语言限制的方法使应用程序得以相互之间进行Intertnet通信。而gSoap可以看做是对soap的一个实现封装,它隐藏了在调用WebService中的大量实现细节,使得C++调用WebService变得较为简单。它提供编译工具(实际就是针对接口的WSDL生成类文件),然后引入工程操作生成类即可达到访问WebService接口的目的。仔细查看生成的文件就会发现生成的类与WebService接口的WSDL文件实际相对应的。

C/C++调用Web Service需要用到soap库,一般使用的有gsoap和axis cpp两种实现,这里使用gsoap来调用。gsoap是sourceforge上的一个开源项目,目前版本是2.7.6c,使用简单,可以在linxu、windows、mac多种平台上使用。gsoap的主页地址是http://gsoap2.sourceforge.net/

gsoap使用步骤

gsoap提供了两个有用的工具:wsdl12h.exe和soapcpp2.exe,帮助我们生成代理类。

以http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl为例讲解


 操作流程
      a) 程序->运行 输入cmd 启动命令行;
      b) 打开wsdl2h.exe所在文件路径(不打开的话下面输入时要记着输入全路径,不然找不着了);
      c) 输入:wsdl2h -o service.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,
      d) 回车 运行吧,看提示信息,没有提示故障的话,查找service .h吧(它的保存路径如果不设置和wsdl2h.exe同一目录);
      e) 得到service.h后,打开可以看到接口定义。如果要用宽字符(这样可以避免中文乱码),将该文件的std::string替换为wchar_t*然后保存
      f) 在命令行中 输入:soapcpp2.exe service.h

         其中
             "soapcpp2.exe",此处把soapcpp2.exe和wsdl2h.exe放在同一目录下了,且前面已打开此路径;
             "service.h"即由wsdl生成的头文件,此文件保存位置与soapcpp2.exe相同,故此处可这样输入,若不同还须设置文件路径;
             同样两项之间也有空格!
             可以增加控制选项如"soapcpp2.exe -C cal.h"则只生成客户端所需文件, "soapcpp2.exe -S calc.h"则只生成服务端所需文件,注意C、S的大写
      g) 回车 运行。
  如果提示找不到文件 stlvector.h,因为service.h文件中引用了文件stlvector.h;解决方法:开发包\gsoap\import目下有此文件,复制一份到service.h所在目录。
         注意:此过程中要检查生成的编译信息,确保没有警告信息出现(警告信息可能是gSoap不支持的内容,如果不去除,程序运行故障很难找到根本原因),另不能只看编译结果成功就认为是正确的,存在警告信息也显示为编译成功!!
      h) 编译成功,生成的框架文件保存位置与service.h在同一目录下,包括:MobileCodeWS.nsmap、soapC.cpp、soapMobileCodeWSObject.h、soapMobileCodeWSProxy.h、soapClient.cpp、soapClient.lib

、soapH.h、soapServer.cpp、soapServer.Lib、soapStub.h和接口的请求应答xml文件。
   其中
   MobileCodeWS.nsmap 为命名空间定义文件;
   soapClient.cpp 客户端文件
            soapServer.cpp 服务端文件
            soapMobileCodeWSProxy.h 代理用到,定义我们所要调用的对象
            soapStub.h 此文件中为程序中要用到的接口及结构体的声明(将service.h中的接口经过处理后,在程序中供调用的接口)
            xml文件 为接口的xml格式,可以据此帮助调试等。。。
            其它文件作用还没完全搞明白,向导中有说明,此处不说了以免误导^_^
      i) 编译过程完成。下面开始程序(客户端)
         VS2010
中新建空的win32控制台工程,新建源文件calcClient.cpp;

         复制编译生成的文件(包括sevice.h和stlvector.h)到程序目录中;
         在工程中添加文件MobileCodeWS.nsmap、soapC.cpp、soapClient.cpp、soapH.h、soapStub.h(使用代理添加soapMobileCodeWSProxy.h);
         编译,提示无法找到文件stdsoap2.h、stdsoap2.cpp文件,这两个文件为gSoap的源码文件,在\gsoap文件夹中找到这两个文件,复制到程序目录下并添加到工程中;

调用MobileCodeWS Mcws;
Mcws.endpoint = url; //webservice的地址


0 0
原创粉丝点击