linux环境下,利用gsoap生成webservice客户端进行应用程序开发的小结 ,轉

关于gsoap和webservice的相关内容,百度百科解释的都挺详细了,链接gsoapwebservice

半年前,需要在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)。

这一步生成如下文件:

  • soapStub.h // soap的存根文件,定义了phonelocal.h里对应的远程调用模型
  • soapC.c soapH.h // soap的序列和反序列代码,它已经包含了soapStub.h,服务器端与客户端都要包含它
  • soapClient.c soapClientLib.c // 客户端代码,soapClientLib.c文件则只是简单地包含soapClient.c和soapC.c
  • ServiceSoap.nsmap ServiceSoap12.nsmap // 名空间定义,服务器端与客户端都要包含它

因为这个项目只需要做客户端,所以在生成存根文件的时候用了-C,如果需要开发服务端的话,只要把这个去掉。本人暂时没尝试做过服务端,等下次有机会再试试。

http://blog.csdn.net/zhubo0228/article/details/6707476