最近一段时间由于项目需求,需要进行WebServers开发,通过查找资料,选择了使用gSoap系统,节省了大量对协议的理解,初次使用,现在就使用gSoap的过程中出现的问题自己做个总结。
首先在网上下载最新版本的gSoap2.8.8
下载解压需要用到的文件 soapcpp2.exe,wsdl2h.exe
其中soapcpp2.exe用于将.h文件生成客户端/服务端的C文件或cpp文件;;wsdl2h.exe用于wsdl文件生成.h文件;关于指令的使用在cmd下输入soapcpp2.exe -h进行查看,可根据需要就行选择。
一.Wsdl使用
怎么wsdl文件生成.h文件?
在CMD中输入:Wsdl2h.exe -s ApplicationQuery.wsdl
执行后生成:ApplicationQuery.h
命令中加入-s是不使用 "stlvector.h"
如果想自己指定命名空间可以使用下面命令:
wsdl2h -s -nQuery -NQueryServer ApplicationQuery.wsdl
怎么将.h文件生成客户端与服务端程序?
客户端:Soapcpp2 -C -p AppQuery -iApplicationQuery.h
执行后出现以下文件:
接口相关信息在文件AppQueryAppQueryProxy.h与AppQueryAppQueryProxy.cpp中。
服务端:
Soapcpp2-S -p AppQuery -i ApplicationQuery.h
接口相关信息在文件AppQueryAppQueryService.h与AppQueryAppQueryService.cpp中。
服务端程序调用方式:
二.不用wsdl
有时我们不熟悉wsdl文件的格式,或者比较麻烦,我们可以自己写.h文件。
按照上面的格式完成后,可以直接用soapcpp2.exe生成相应的代码,与上面介绍的生成客户端与服务端类似。
三.整合多个wsdl
有时候接口(wsdl)比较多时,需要将它们整合到一起.
-
先将各wsdl文件生成.h,生成时需要重新命名空间(各命名空间最好不同);
如wsdl2h.exe -nQuery -NAppQuery ApplicationQuery.wsdl
-
在将各个wsdl文件生成的.h文件,拷贝到一个文件中。
-
用soaocpp2.exe生成相应代码即可。
不过这样代码添加到项目的时候,会编译不过,比如生成服务端代码时,这就需要修改一下程序中的命名空间,把不相干的删除掉。
另外在#include“***.nsmap”文件即可。
四.既是客户端又是服务端
如果模块既是客户端又是服务端,怎么办?我是这样的处理,按照上面介绍的先将服务端代码生成出来,然后生成客户端。由于在生成的代码中客户端与服务端有相同的代码部分
此时,我是采用的将它们合并到一起。为了合并最好把命名空间取值一样,即上面看到的AppQuery;
即:
感觉这种比较麻烦,应该有比较好的办法处理这种情况。后面再更新