gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。
gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。
gsoap下载地址
http://download.csdn.net/download/wangshun06/871708
wsdl2h常用选项
- -o 文件名,指定输出头文件
- -n 名空间前缀 代替默认的ns
- -c 产生纯C代码,否则是C++代码
- -s 不要使用STL代码
- -t 文件名,指定type map文件,默认为typemap.dat
- -e 禁止为enum成员加上名空间前缀
soapcpp2:常用选项
- -C 仅生成客户端代码
- -S 仅生成服务器端代码
- -L 不要产生soapClientLib.c和soapServerLib.c文件
- -c 产生纯C代码,否则是C++代码(与头文件有关)
- -I 指定import路径(见上文)
- -x 不要产生XML示例文件
- -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
步骤:
WebClient.h表示根据http://192.168.0.75/ws1/?wsdl输出函数描述文件为message.h
1.wsdl2h -o WebClient.h http://192.168.0.75/ws1/?wsdl //服务地址+?wsdl
使用soapcpp2来生成代理函数
2.soapcpp2 -C -I E:\gsoap-win32-2.7\import WebClient.h
这个命令执行后会生成下面的文件:
生成的文件如下:
soapStub.h
soapServiceSoapBindingProxy.h:封装了调用webservice的类,程序直接操作的类,里面包含了客户端程序可以调用
服务的接口
soapH.h
soapClientLib.cpp:用不到
soapClient.cpp
soapC.cpp
ServiceSoapBinding.nsmap:namespaces声明,需要包含在一个cpp文件里面,比如放在StdAfx.cpp里面,否则连接
时报错:unresolved external symbol _namespaces
另外,程序还需要加入stdsoap2.cpp和stdsoap2.h文件,同时将上面几个cpp文件的前面,#include "StdAfx.h"加到第一行
否则VC编译报错:fatal error C1010: unexpected end of file while looking for precompiled header directive。
创建工程
注意:
1.将wsock32.lib添加到链接路径。(工程属性——链接——输入)
2.做为web service调用方,实际使用到的stdsoap2.c soapC.c soapClient.c这几个文件(包括对应头文件),MessageServiceSoap.nsmap实际上是一个头文件,定义了soap相应的namespace.
编写测试代码: