基于gSOAP的WebService开发指导说明文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于gSOAP的WebService
开发指导说明书
1简介
1.1目的
本文通过给出gSOAP库的基本使用样例,帮助开发人员进行WebService相关的开发
1.2范围
本文只包含gSOAP库C++版本的基本使用样例,不包含其他高级使用或C版本的使用方式
1.3名词解释
1.4参考资料
2准备工作
2.1gSOAP库
很显然,要想基于gSOAP库开发WebService应用,你需要首先获取gSOAP库。
gSOAP库是一个开源库,你可以在以下网址进行下载:
/project/showfiles.php?group_id=52781
如果链接失效,也可以去一个介绍gSOAP的网站上查看最新下载地址:
/~engelen/soap.html
本文所用的版本为(soapcpp2):
下载下来以后解压缩,你会得到这么一个目录:
其中gsoap目录有以下结构:
注意这两个文件:stdsoap2.h和stdsoap2.cpp,我们编写gSOAP程序的时候是需要它们的。还要注意的是bin\win32目录下的两个可执行文件:soapcpp2.exe和wsdl2h.exe,目前我们只需要soapcpp2.exe。
也就是说,要使用gSOAP,我们需三个文件:
解压目录\gsoap-2.8\gsoap\ stdsoap2.h
解压目录\gsoap-2.8\gsoap\ stdsoap2.cpp
解压目录\gsoap-2.8\gsoap\bin\win32\ soapcpp2.exe
使用gSOAP不需要在程序中添加额外的库,而是要通过工具生成并包含额外的文件。接下来,我们通过一个实例去了解如何使用gSOAP提供的这三个文件。
3创建一个WebService服务端工程
gSOAP使用了代码生成器帮助我们生成一些辅助性的框架与类,所以我们想要使用gSOAP,则需要做一些额外的工作。
下面我们就从零开始构建一个使用gSOAP的服务端工程。
3.1新建一个工程
这一步没什么难度,使用VS直接新建一个工程即可。
我们可以建立任意的C++工程,为了可以未来和Qt进行结合,我们新建一个QtApplication:
解决方案名字,工程名,类名与Widget类型不重要,我们可以随意决定。
于是,我们创建的工程树与目录结构如下:
为了使用gSOAP,我们需要向我们的工程目录下拷贝一些必要的文件:
它们原本所在的地方为:
解压目录\gsoap-2.8\gsoap\ stdsoap2.h
解压目录\gsoap-2.8\gsoap\ stdsoap2.cpp
解压目录\gsoap-2.8\gsoap\bin\win32\ soapcpp2.exe
3.3写WebService接口函数
gSOAP可以使我们像是用本地函数一样调用WebService,所以我们首先要做的就是定义WebService接口函数,新建一个头文件,名字随意(我们使用soapInterface.h),然后按照以下格式书写函数:
注意:前三行的注释是必要的,并且必须符合语法规则,其中ns表示的是WebService 的基本命名空间,默认ns即可,而冒号后面,则是以下含义:
●//gsoap ns service name: WebService的名字,随意即可,它只关系到最
终生成的文件和类的名字,只要符合其实际的含义,名字随意
●//gsoap ns service protocol: WebService所用协议,默认SOAP即可
●//gsoap ns service style:WebService类型,默认rpc即可,表示使用远
程调用
●事实上,只有第一行注释是有意义的,剩下两行都如果不存在则会使用默认值
——那其实就是我们定义的值,但是为了更加清晰,最好可以使用全部的三行
注释(事实上,完整的注释有更多行,但是尚未清楚其意义。)
然后,包含必要的头文件,使得函数声明合法。(例如,为了使用std::string,我们需要包含string头文件)
注意:不支持Qt类,不支持const引用参数,不支持标准库中的容器。
最后,就是一条一条地定义WebService方法了,其中,方法名,参数与返回值要符合以下规则:
●返回值必须是int
●函数名必须要以基本命名空间开头,命名空间后面必须要加两个下划线,两个
下划线后面就可以跟随任意的符合命名规范的函数名了
●参数必须至少有1个
●最后一个参数表示WebService的返回值,它必须是指针或者引用(因为只有这
样我们才能在函数内部修改这个值)
其他需要注意的地方:
你可以定义多个符合规则的接口文件,这样子会产生多个WebService服务。但是请不要将同一个WebService的接口在多个文件中定义,也不要为不同的WebService服务起相同的名字。
3.4写一个方便我们使用的批处理文件
soapcpp2.exe使用命令行参数的形式生成文件,为了方便我们可以“一键操作”,我们写一个批处理文件BuildSOAP.bat,内容如下:
@echo off
mkdir gSOAP
soapcpp2.exe -i -dgSOAP soapInterface.h
pause
其中,soapInterface.h就是我们刚刚定义好的WebService函数接口,如果存在多个函数接口,则可以写多行相似的命令
-dgSOAP则表示要将soapcpp2.exe生成的文件放到gSOAP目录下,这样方便我们将自己的代码与soapcpp2.exe生成的代码分离开(在目录前附加-d即表示输出目录,注意,-d与目录名之间没有空格)
加-i表示我们要生成C++类,方便我们使用这个服务。
然后我们就可以执行这个批处理文件了,执行完毕后,我们去gSOAP目录下,可以看到以下的生成文件: