gsoap的使用(调用webservice)

这些天一直在折腾openssl和sqlite,都忘记了还有gsoap这个也是花了很多时间和精力才弄明白的东东。刚好下午开完例会不想干活了。于是先就写个中文版的gsoap的教程贴出来共享下。

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

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

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

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

             了解了这些之后,接下来该如何上手?

              当然是新建一个web service啦。在VS2005里面新建一个ASP.NET Web 服务MyWebService.

              gsoap的使用(调用webservice)_第1张图片

              这是一个很简单的web method,仅仅用来测试一下而已啦。

               运行这个web service,会出来一个页面

               gsoap的使用(调用webservice)_第2张图片

                  点击 service description,就可以看到wsdl文件。把地址栏的路径保存下来。比如我的就是http://localhost:2488/Service1.asmx?WSDL

                  好了,这会服务器端就有了。再写客户端的代码。在写客户端的代码之前,要利用刚刚的那两个工具和wsdl文件生成一些必要的cpp和头文件。

                  首先运行,cmd,然后打开gsoap\bin\win32,运行wsdl2h.exe

                   用法:

    wsdl2h -o 头文件名 WSDL文件名或URL 例子: wsdl2h -o test.h http://localhost:2488/Service1.asmx?WSDL可以看到win32里面多了一个test.h文件。好啦,今天就到这里啦。嘿嘿嘿。精彩待续,敬请期待DANA的大作哈哈哈哇咔咔飘走~~~~~~~
    ------------------------分割分割分割------------------------------------
    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文件路径,这个路径是"$gsoap\gsoap\import":
    soapcpp2.exe -C test.h -I D:\work\gsoap_2.7.13\gsoap-2.7\gsoap\import
    这个时候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啦。


    原文:http://hi.baidu.com/ueuvtoiitabgkwd/item/7c61a166f90c7e94c4d24914

    webservice 地址:http://www.webxml.com.cn/webservices/chinastockwebservice.asmx
    另也可以使用MS的SoapToolkit的库调用webservice
    
    
    

    http接口和webservice接口的区别 

    简单说  
    httpservice通过post和get得到你想要的东西
    webservice就是使用soap协议得到你想要的东西,相比httpservice能处理些更加复杂的数据类型
    http协议传输的都是字符串了,webservice则是包装成了更复杂的对象。
    hessian类似于webservice,但是它采用的是二进制RPC协议(Binary),具有轻量、传输量小、平台无关的特点,特别适合于目前网络带宽比较小的手机网络应用项目。
    以hessan的java实现为例,它可以传输Map、List、以及自定义的各种数据接口;比http的纯字符串也方便的多,省却了解析http返回值的步骤。

  • 你可能感兴趣的:(gsoap的使用(调用webservice))