功能: 编译wsdl文件生成C/C++代码的soap接口和xml文件
工具:wsdl2h.exe soapcpp2.exe
1.wsdl2h.exe:根据WSDL生成描述服务操作定义及数据类型定义的头文件
2.soapcpp2.exe:根据头文件自动生成调用远程SOAP服务的客户端代码(称为存根:Stub)和提供SOAP服务的框架代码(称为框架:Skeleton)、XML序列化的例程、甚至包含从头文件生成的WSDL文件。
核心:gSOAP引擎
1.gSOAP引擎可以被构建成libgsoap.a和libgsoap++.a库,后者支持SSL
2.或者可以将引擎的源代码stdsoap2.c(或stdsoap2.cpp)直接编译并链接进你们工程里
3.gSOAP提供两种使用方式 :一种编译成动态链接库,或者直接将源代码编译进工程
gsoap\stdsoap2.cpp是gSOAP的核心代码,要使用gSOAP只要在项目里包含这个文件以及由soapcpp2.exe生成的代码即可。
typemap.dat文件:用于指定SOAP/XML中的类型与C/C++之间的转换规则。
理解:
1.SOAP客户端:发出SOAP请求Web服务,处理服务应答。 一般情况下,SOAP客户端程序的实现需要一个存根(也称做服务代理),该存根提供客户端调用服务的操作;存根的主要职责是处理参数,通过网络向指定的服务端发送请求,并等待应答,应答到来后再将参数解析出来;客户端只需要调用存根提供的例程,就像调用本地的函数一样。
2.SOAP服务端:接受SOAP请求并执行请求的服务,返回服务结果。 一般情况下,SOAP服务端程序都有一个基本一致的框架:监听相应端口是否有请求连接,接受并解析SOAP请求,根据请求执行对应的Web Service服务例程,并将执行结果返回给请求的客户端,也就是一个网络WEB服务端的框架结构。
步骤:
$ wsdl2h -s -o calc.h http://www.cs.fsu.edu/~engelen/calc.wsdl
$ soapcpp2 calc.h
应用:
1.#include "soapH.h" —— wsdl中定义操作的soap方法请求/响应
2.#include "calc.nsmap" —— 符号命名空间(C++)
3.客户端:soapClient.cpp
4.服务端:soapServer.cpp
流程:构建Web services应用程序
1.找到web services的wsdl文件
2.使用gSOAP中的wsdl2h和soapcpp2工具编译wsdl生成soap的C/C++代码
3.明确是需要开发web service中的服务端还是客户端,或者两者
4.编写客户端代码,请求和使用web service服务
5.参照服务端的测试代码,编写服务端代码,完成web service的具体业务逻辑实现
6.配置服务端的IP网络、端口信息,运行服务端(gSOAP服务器)提供web service服务
跨平台:
1.不同平台下的gSOAP工具生成的C/C++代码是平台无关的,可以跨平台进行使用编译
2.可以重新从源码构建gSOAP工具,但需要满足一些条件:
一个C编译器和Bison(或Yacc)来构建soapcpp2。(注Bison和Yacc也是一种编译器)
一个C编译器和Flex(或Lex)来构建soapcpp2。
一个C++编译器来构建wsdl2h。
3.可以在windows或者Linux/x86平台上完成web services服务端程序的开发和测试,然后移植到linux/arm上
WEB服务开发:机制
1.CGI机制 -- 简单但缓慢
2.Apache组件 ———— gsoap/mod_gsoap
3.IIS组件 ———— gsoap/mod_gsoap
4.开发独立的gSOAP HTTP/HTTPS服务
WEB服务开发:过程
1.有WSDL服务定义文件 ———— 参考上面的服务端程序开发流程
2.无WSDL服务定义文件
a.编写定义web service服务的C/C++头文件
b.使用soapcpp2工具生成源代码和WSDL文件
c.实现web service的业务逻辑和服务端程序
d.发布WSDL服务