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.

          

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

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

           

              点击 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 (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))