用gSOAP开发Web Service程序.doc
文本预览下载声明
用gSOAP开发Web Service程序
2009-07-23 20:25:56 作者:毛毛 来源: 浏览次数:14604 网友评论 15 条
gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出 SOAP/XML的服务器端和客户端。由于gSOAP具有相当不错的兼容性,通过gSOAP,我们就可以调用由 Java,.Net,Delhpi,PHP等语言开发的SOAP服务,或者向它们提供SOAP服务。
gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端。由于 gSOAP具 有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SOAP服务。
gSOAP的主页是:
/projects/gsoap2
下载解压后,可以在gsoap\bin\win32 里 找到wsdl2h.exe和soapcpp2.exe(另外还有linux和mac版本)。
wsdl2h.exe 的作用是根据WSDL生成C/C++风格的头 文件
soapcpp2.exe 的作用是根据头文件自动生成调用远程 SOAP服务的客户端代码(称为存根:Stub)和提供SOAP服务的框架代码(称为框架:Skeleton),另外它也能从头文件生成WSDL文件。
gsoap\stdsoap2.cpp 则是gSOAP的核心代码,要使用 gSOAP只要在项目里包含这个文件以及由soapcpp2.exe生成的代码即可。另外还有个stdsoap2.c,内容与stdsoap2.cpp一 模一样,用于纯C项目。
gSOAP两大工具的用法
从WSDL中产生头文件
用法:
wsdl2h -o 头文件名 WSDL文件名或URL
wsdl2h常用选项
-o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写
xsd__string = | std::wstring | wchar_t*
那么SOAP/XML中的string将转换成std::wstring或wchar_t*,这样能更好地支持中文。
例:
wsdl2h -o ayandy.h -n ay -t wsmap.dat /Service.asmx?WSDL
从/Service.asmx?WSDL 生成ayandy.h文件,名空间为ay,使用wsmap.dat指定的转换规则。
wsdl2h生成的头文件里的变量、类型等名称的前面都会加上名空间前缀,以两个下划线分隔。如上面的命令生成的头文件,有这样的定 义:
class ay1__ArrayOfString;
enum ay1__theDayFlagEnum
{
ay1__theDayFlagEnum__Today,
ay1__theDayFlagEnum__Tomorrow,
ay1__theDayFlagEnum__theDayafterTomorrow,
};
前面的ayandy1__ 的是名空间前缀,用以防止名称冲突。 wsdl2h的-n 选项可以改变这个名空间前缀(默认为ns )。对于枚举ay1__theDayFlagEnum 内 的成员,如果嫌它太长的话,可以用-e 命令选项禁止加入名空间前缀。
从头文件生成存根(stub)和框架(Skeleton)源文件
编写SOAP程序除了头文件是不够的,还要有连接、通信、XML解析、序列/反序列化等工作。gSOAP提供的socapcpp2.exe 就 是用于从头文件中生成这些代码的,我们只要关心真正的业务逻辑就行了。
用法
soapcpp2 头文件
例:
soapcpp2 ayandy.h
将生成下面这些文件
soapStub.h // soap的存根文件,定义了ayandy.h里对应的远程调用模型
soapC.c soapH.h // soap的序列和反序列代码,它已经包含了soapStub.h,服务器端与客户端都要包含它
soapClient.c soapClientL
显示全部