文档详情

用gSOAP开发Web Service程序.doc

发布:2017-12-12约9.25千字共8页下载文档
文本预览下载声明
用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
显示全部
相似文档