关于gsoap和webservice的相关内容,百度百科解释的都挺详细了,链接gsoap、webservice。
半年前,需要在linux平台下用纯C开发webservice的应用,在这以前从未接触过webservice,一头雾水,不知道从何下手,在网上辗转求助,无意中发现gsoap这个编译工具,gsoap是一个开源项目,它可以方便的使用C调用webservice服务,开发者不需要去了解webservice的具体实现。
实践是检验真理的唯一标准,下面来总结下如何在linux平台下进行开发。
首先,准备gsoap软件,地址:http://gsoap2.sourceforge.net/,本人以前下载的是gsoap_2.7.15.tar.gz,并装到linux平台中,./configure(默认安装在/usr/local/share/gsoap目录下,也可以使用 ./configure –-prefix=/usr/local/gsoap指定安装路径) 默认安装的话,/usr/local/bin>目录下会有wsdl2h和 soapcpp2两个程序。wsdl2h:编译wsdl文件生成c/c++头文件。soapcpp2:gSOAP编译器,编译头文件生成服务器和客户端都需要的 c/c++文件。
然后建立项目的文件夹,例:mkdir phonelocal,上一步安装完成后,安装路径下会有stdsoap2.c,stdsoap2.h这两个文件,把这两个文件复制到新建的项目文件夹下,必不可少。至此,工具环境都算准备好了。
接下来就是要进行开发了,
首先,我们要得到wsdl文件(wsdl文件介绍),简单来说,他就是来描述webservice接口的。一般只要在webservice地址后加“?wsdl” 就行,例如,我们项目的webservice地址是:http://60.179.124.102/websp/Service.asmx ,它对应的wsdl文件就是:http://60.179.124.102/websp/Service.asmx?wsdl 。
我们用wsdl2h工具通过以上wsdl文件来生成C/C++的头文件。 命令执行如下: /usr/local/bin/wsdl2h -c -o phonelocal.h http://60.179.124.102/websp/Service.asmx?wsdl 。此处的头文件名可以根据自己要求随便取。
wsdl2h常用选项:
-o 文件名,指定输出头文件
-n 空间名前缀,代替默认ns
-c 产生纯C代码,否则是C++
-s 不要使用stl代码
-t 文件名,默认使用typemap.dat(下文会详细阐述)
-e 禁止enum加上命名空间前缀
然后用soapcpp2工具来生成存根文件,命令如下: soapcpp2 -c -C -x phonelocal.h
soapcp2常用选项:
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
这一步生成如下文件:
因为这个项目只需要做客户端,所以在生成存根文件的时候用了-C,如果需要开发服务端的话,只要把这个去掉。本人暂时没尝试做过服务端,等下次有机会再试试。
接下来就开始要写代码了,代码如下,