gSOAP中文文档
- 格式:docx
- 大小:32.94 KB
- 文档页数:29
C/C++ SOAP工具包 gSOAPgSOAP一种跨平台的C和C++软件开发工具包。
生成C/C++的RPC代码,XML数据绑定,对SOAP Web服务和其他应用形成高效的具体架构解析器,它们都受益于一个XML接口。
这个工具包提供了一个全面和透明的XML数据绑定解决方案,Autocoding节省大量开发时间来执行SOAP/XML Web服务中的C/C++。
此外,使用XML数据绑定大大简化了XML自动映射。
应用开发人员不再需要调整应用程序逻辑的具体库和XML为中心的数据,如交涉DOM。
功能和特点可移植性:gSOAP支持大多数平台,包括嵌入式系统和小系统(例如嵌入式Symbian,Palm)。
可移植性测试Windows(98,XP,Vista),Linux,Unix 系统,Mac OS X,Solaris,HP-UX,AIX,FreeBSD,TRU64,Irix,QNX,VxWorks。
稳定性:该软件已经成熟。
自2001年以来经过几年的发展和试验。
许多工业项目和产品都在使用该软件。
广泛的用户群:自2003年以来超过150000次下载,成千上万许可证/支持协议的公司,其中包括一些财富100强企业。
所有功能于一身的软件包:独立第三方工具和库确保可靠的运行执行。
开源:可选择自由和商业许可。
C和C++的支持:支持纯粹的ANSI C和混合的C/C++应用开发。
综合XML数据绑定:gSOAP是唯一的SOAP/XML工具包,支持一个纯粹的本地的C/C++数据绑定到XML。
该工具包是以自动序列指针为基础的数据结构。
行业标准协议:SOAP 1.1/1.2 WSDL 1.1,v2和UDDI 。
支持XML架构原始XSD结构类型等等。
传输:HTTP/S, TCP, UDP, MIME (SwA), DIME (streaming), MTOM (streaming), HTTP1.0/1.1, IPv4, IPv6, RSS, XML-RPC, WS-Addressing, WS-Enumeration等安全:HTTPS和WS安全性:认证令牌,数字签名。
gsoap使用方法及心得----CC++Linux一、环境准备在本文中,所有程序均在Linux下开发完成,经测试能够正常运行。
在开发过程中,我们需要用到gSOAP,可以从以下网址下载获得:我下载的是gsoap_2.7.12.tar.gz下载下来解压缩,按正常安装过程进行编译、安装。
# tar zxvf gsozp_2.7.12.tar.gz# cd gsoap_2.7.12# ./configure –-prefix=/usr/local/gSOAP(指定安装路径)# make# make install二、生成相关文件1、通过WSDL文档,生成C/C++头文件# /usr/local/gSOAP/bin/wsdl2h –c -o TestHeader.h2、拷贝gSOAP源代码中import文件夹下的stlvector.h文件到TestHeader.h同一目录,如果在解析WSDL文档时使用了-s参数,即不使用STL,则不需要拷贝这一文件。
2、解析TestHeader.h文件,生成存根程序# /usr/local/gSOAP/bin/soapcpp2 –c -C TestHeader.h命令中参数-c代表生成标准C程序,若没有这个参数,则生成C++程序。
命令中参数-C代表仅生成客户端程序,若没有这个参数,则默认生成客户端和服务端程序。
三、进行相关开发1、新建工程新建一个C的工程,并将刚刚生成的文件拷贝到工程中,设置工程属性,包含gSOAP源代码目录,链接属性处,需要包含文件libgsoap.a(使用C语言开发)或者libgsoap++.a(使用C++开发)。
2、代码开发WebService的具体调用方式可以参见生成的soapStub.h文件。
Demo代码(调用WebService的addUser):#include “soapH.h”#include “TestHeaderHttpBinding.nsmap”int main(){struct soap clientSOAP;struct _ns1__addUser addUserMsg;struct _ns1__addUserResponse addUserResponse;soap_init(&clientSOAP);addUserMsg.in0 = “test”;addUserMsg.in1 = “test”;addUserMsg.in2 = “test”;if(soap_call___ns1__addUser(&clientSOAP, NULL, NULL, &addUserMsg, &addUserResponse) == SOAP_OK){printf(“%sn”, *addUser Response.out);}else{printf(“Errorn”);}soap_destroy(&clientSOAP);soap_end(&clientSOAP);soap_done(&clientSOAP);return 0;}正常的话,编译运行后能够在控制台看到WebService返回的处理结果。
linux gsoap 用法gSOAP 是一个用于开发Web 服务和SOAP 客户端/服务器应用程序的开源工具包。
它可以让开发者通过创建C/C++ 代码来构建基于SOAP 的Web服务和客户端。
在Linux 上使用gSOAP,你需要遵循以下步骤:1. 下载gSOAP 工具包:- 前往gSOAP 官方网站("gSOAP Toolkit" 下载最新版本的gSOAP 工具包。
- 解压下载的压缩包。
2. 编写服务定义文件(.wsdl 文件):- 使用你喜欢的文本编辑器,编写一个包含要实现的Web 服务的定义的 .wsdl 文件。
这个文件描述了服务的数据类型、操作和消息。
3. 生成源代码:- 打开终端,进入gSOAP 工具包的解压目录。
- 运行命令`./soapcpp2 -C -I path_to_gsoap_toolkit your_service.wsdl`,其中`path_to_gsoap_toolkit` 是gSOAP 工具包的路径,`your_service.wsdl` 是你编写的 .wsdl 文件的路径。
- 这将使用gSOAP 工具根据你的 .wsdl 文件生成C/C++ 源代码。
4. 实现Web 服务:- 在生成的源代码中,找到`your_serviceService.cpp` 文件。
- 在这个文件中,你可以实现Web 服务的操作。
你需要编辑操作的函数实现,处理接收到的请求,并返回响应。
5. 编译生成的源代码:- 在终端中,使用适当的编译器(如gcc)编译生成的源代码。
- 运行命令`gcc -o your_service your_serviceService.cpp soapC.cpp soapServer.cpp stdsoap2.cpp -lgsoap++`,其中`your_service` 是生成的可执行文件名。
- 如果编译成功,将生成一个可执行文件。
6. 启动Web 服务:- 运行命令`./your_service` 来启动Web 服务。
gsoap编译GSOAP是一款开源的C/C++软件,是一种基于SOAP的Web服务开发工具。
它可以让用户通过简单的代码,实现创建SOAP消息、IPC、Web服务和Web应用程序等功能。
用户可以使用gSOAP开发部署服务器端和客户端的应用程序。
本文将向您介绍gSOAP编译,并告诉您如何使用该工具。
第一步:下载gSOAP软件包在编译gSOAP之前,我们需要从官方网站下载gSOAP软件包。
该网站提供了多种版本的gSOAP,您可以根据自己的需要选择不同的版本。
建议您下载最新版本的gSOAP。
第二步:解压缩gSOAP软件包下载完成后,将gSOAP 软件包解压缩到您的计算机上。
如果您使用的是Linux和Unix操作系统,可以利用tar命令实现解压缩操作。
例如:$ tar xzf soapsource.tgz第三步:配置gSOAP 进入gSOAP软件包目录。
在该目录中会看到一个名为configure的文件。
Connectors目录中有可选的连接器。
可以使用的连接器有:Stdio连接器SSL连接器HTTPS连接器zlib连接器接下来,我们通过执行configure脚本来生成Makefile,执行以下命令: $ ./configure如果您需要配置gSOAP的全部选项,可以使用以下命令: $ ./configure --help第四步:编译gSOAP 在配置完gSOAP后,我们可以进入soapcpp2目录并使用make命令进行编译。
以下是命令:$ cd gsoap-<version>/gsoap$ make这会生成一个名为soapcpp2的可执行文件。
我们可以使用该文件来生成SOAP客户端和服务器端的代码。
第五步:测试gSOAP 完成编译后,您可以使用gSOAP 测试Web服务和Web应用程序。
您可以使用以下命令测试gSOAP:$ ./soapcpp2该命令将告诉gSOAP要生成客户端和服务器端代码的相关选项。
C++中gSOAP的使⽤详解⽬录SOAP简介gSOAP准备⼯作头⽂件构建客户端应⽤程序⽣成soap源码建⽴客户端项⽬构建服务端应⽤程序⽣成SOAP源码建⽴服务端项⽬打印报⽂SOAP测试项⽬源码总结本⽂主要介绍C++中gSOAP的使⽤⽅法,附带介绍SOAP协议的基础知识,适⽤于第⼀次使⽤gSOAP的开发⼈员。
gSOAP官⽹上的⽰例代码存在⼀些错误,对初次接触的⼈不太友好,本⽂是在官⽅⽰例的基础上进⾏了⼀些补充、改动。
SOAP简介SOAP 是⼀种简单的基于 XML 的协议,它使应⽤程序通过 HTTP 来交换信息,具体内容可以参考教程。
SOAP的本质是通过HTTP协议以XML格式进⾏数据交互,只不过这个XML格式的定义是⼤家公认的。
使⽤SOAP时需注意,SOAP的XML命名空间由于版本的不同可能存在差异(如soapevn、SOAP-ENV),在调⽤SOAP服务前最好确认服务器的XML格式。
gSOAPgSOAP 有商业版、开源版两个版本,开源版使⽤GPLv2开源协议,⽀持多个操作系统,具体内容参考或者。
gSOAP提供了⼀组编译⼯具(可以认为是代码⽣成器)和⼀些库⽂件,简化C/C++语⾔开发web服务或客户端程序的⼯作,开发⼈员可以专注于实现应⽤程序的逻辑:编译⼯具提供了⼀个SOAP/XML 关于C/C++ 语⾔的实现,能够⾃动完成本地C或C++数据类型和XML数据结构之间的转换。
库⽂件提供了SOAP报⽂⽣成、HTTP协议通讯的实现,及相关的配套设施,⽤于最终的SOAP报⽂的⽣成、传输。
本⽂使⽤的库⽂件主要是以下⼏个:stdsoap2.h、stdsoap2.cpp:HTTP协议的实现、最终的SOAP报⽂⽣成,如果是C语⾔则使⽤stdsoap2.h、stdsoap2.ctypemap.dat: wsdl2h⼯具根据wsdl⽂件⽣成头⽂件时需要此⽂件,可以更改项⽬的xml命名空间(后⾯再细说)threads.h:实现⾼性能的多线程服务器需要的⽂件,可以并发处理请求,并且在服务操作变得耗时时不会阻塞其他客户端请求准备⼯作先进⼊官⽹的,然后选择开源版本:将下载的压缩包解压(本⽂使⽤的是gsoap_2.8.117.zip),解压后的⽂件放到⾃⼰习惯的位置(推荐放到C盘)。
gsoap中文文档8.1.2 关于命名空间函数ns1__getQuote(上节提到的)中,使用了ns1__作为远程方法的命名空间。
使用命名空间是为了防止远程方法名冲突,比方多个服务中使用同一个远程方法名的情况。
命名空间前缀及命名空间名称同时也被用来验证SOAP信息的内容有效性。
存根例程通过命名空间表中的信息来验证服务返回信息。
命名空间表在运行时被取出用于解析命名空间绑定,反序列化数据结构,解码并验证服务返回信息。
命名空间表不应该包含在gSOAP预编译器所需输入的头文件中。
在18.2节中将会对命名空间表做详细介绍。
Delayed Stock Quote服务客户端的命名空间表如下:struct Namespace namespaces[] ={ // {"命名前缀", "空间名称"}{"SOAP-ENV", "/soap/envelope/"}, // 必须是第一行{"SOAP-ENC", "/soap/encoding/"}, // 必须是第二行{"xsi", "/2001/XMLSchema-instance"}, // 必须是第三行{"xsd", "/2001/XMLSchema"}, // 2001 XML 大纲{"ns1", "urn:xmethods-delayed-quotes"}, // 通过服务描述获取{NULL, NULL} // 结束};第一行命名空间是SOAP1.1协议默认命名空间。
事实上,命名空间表就是用来让程序员可以规定SOAP编码方式,能够用包含命名空间的命名空间前缀来满足指定SOAP服务的命名空间需求的。
举例来说,使用前面命名空间表中定义的命名空间前缀ns1,存根例程就可以对getQuote方法的请求进行编码。
文章标题:深度解析gsoap在Restful API中的示例应用在当今的软件开发领域,Restful API已经成为了构建Web服务和移动应用程序的标准。
而gsoap作为一种高效的工具和库,被广泛用于实现和部署Web服务和API。
本文将深入探讨gsoap在Restful API 中的示例应用,帮助读者更全面地理解这一技术。
1. gsoap简介让我们简要介绍一下gsoap。
gsoap是基于C/C++的开源工具,可用于开发和部署Web服务和客户端,支持SOAP和REST等Web服务协议。
它提供了一种简单而强大的方法,帮助开发人员创建和使用Web服务。
而在本文中,我们将集中讨论gsoap在Restful API中的应用示例。
2. Restful API概述Restful API是一种基于Rest架构风格的API设计,它的核心理念是以资源为中心,通过HTTP协议进行通信。
Restful API使用HTTP方法来操作资源,如GET、POST、PUT和DELETE等,同时采用JSON 或XML等格式进行数据传输。
它的设计简洁而高效,越来越受到开发者的青睐。
3. gsoap在Restful API中的示例应用现在让我们深入探讨gsoap在Restful API中的示例应用。
假设我们需要实现一个简单的Restful API,用于管理用户信息,包括查询用户、创建用户、更新用户和删除用户等操作。
我们可以使用gsoap来实现这一目标。
我们需要定义接口描述语言(IDL),用于描述API的资源和方法。
我们可以使用gsoap提供的工具来生成服务端和客户端的代码。
通过生成的代码,我们可以轻松地实现Restful API的各种功能。
我们可以使用gsoap生成的代码来实现用户信息的查询功能。
通过定义HTTP的GET方法和对应的URL,我们可以向服务器发送查询用户信息的请求,服务器接收到请求后,调用gsoap生成的代码来执行相应的操作,并将结果以JSON格式返回给客户端。
qt gsoap用法Qt gSOAP是一个在Qt框架下使用gSOAP工具包的库。
gSOAP可以通过使用Web服务定义语言(WSDL)生成SOAP服务端和客户端的代码。
在本篇文章中,我将介绍如何在Qt中使用gSOAP库。
首先,要在Qt项目中使用gSOAP,需要先安装gSOAP工具包。
可以在gSOAP官方网站上下载并安装最新版本的gSOAP。
安装完成后,打开Qt项目,将gSOAP的头文件和库文件添加到项目中。
可以通过以下步骤来实现:1. 在Qt Creator中打开项目,选择“项目”菜单,然后选择“属性”选项。
2. 在属性对话框中,选择“构建和运行”选项,然后选择“构建设置”选项卡。
3. 在"C++"部分中,选择“包含路径”选项,点击“添加”按钮,将gSOAP头文件所在的目录添加进来。
4. 在"链接器"部分中,选择“库路径”选项,点击“添加”按钮,将gSOAP库文件所在的目录添加进来。
5. 在"链接器"部分中,选择“附加库”选项,点击“添加”按钮,将gSOAP库文件添加进来。
完成上述步骤后,就可以在Qt项目中使用gSOAP了。
首先,我们需要编写一个WSDL文件来定义我们的SOAP服务。
可以使用gSOAP自带的wsdl2h工具来生成C++头文件。
在终端中运行以下命令:```shellwsdl2h -o HelloWorld.h HelloWorld.wsdl```这将生成一个名为HelloWorld.h的C++头文件,其中包含了定义我们的SOAP 服务所需的类和对象。
接下来,我们可以使用soapcpp2工具来生成主要的gSOAP源文件。
在终端中运行以下命令:```shellsoapcpp2 -i -C HelloWorld.h```这将生成一系列的C++源文件,其中包括用于编写我们的服务代码的skeleton 文件和stub文件。
现在,我们可以在Qt项目中创建一个新的类来实现我们的SOAP服务。
gsoap用户手册gSOAP是一个用于开发Web服务和XML数据处理的开源工具包。
它支持多种编程语言,包括C和C++,并提供了丰富的功能和工具来简化Web服务的开发和集成。
gSOAP用户手册是一个详细的文档,涵盖了gSOAP工具包的安装、配置、使用和高级特性等方面的内容。
用户手册通常包括以下内容:1. 安装指南,用户手册会提供安装gSOAP工具包的详细步骤,包括下载源代码、编译安装和配置环境等内容。
这部分内容通常会针对不同的操作系统和开发环境进行说明。
2. 快速入门,用户手册会介绍如何快速上手使用gSOAP工具包,包括创建一个简单的Web服务、生成客户端代码、编译和部署等内容。
这部分内容通常会包括示例代码和详细的步骤说明。
3. gSOAP基础,用户手册会介绍gSOAP工具包的基本概念和核心功能,包括如何定义和发布Web服务、如何处理XML数据、如何进行SOAP通信等内容。
这部分内容通常会涵盖gSOAP工具包的核心API和使用方法。
4. 高级特性,用户手册会介绍gSOAP工具包的高级特性和扩展功能,包括如何处理安全性、如何进行性能优化、如何集成其他协议等内容。
这部分内容通常会提供一些实际的应用场景和最佳实践。
5. 参考资料,用户手册通常会包括一些附录和参考资料,如API参考、配置文件说明、常见问题解答等内容,以方便开发者查阅和深入理解gSOAP工具包。
总的来说,gSOAP用户手册是开发者学习和使用gSOAP工具包的重要参考资料,它提供了全面而详细的内容,帮助开发者快速上手并深入理解gSOAP工具包的各项功能和特性。
希望这些信息能够对你有所帮助。
gsoap plugin机制
gSOAP是一个用于开发Web服务和客户端的工具包,它提供了
一种方便快捷的方式来创建和使用SOAP和RESTful风格的Web服务。
gSOAP的插件机制为开发人员提供了一种灵活的方式来扩展和定制gSOAP的功能。
gSOAP插件机制允许开发人员编写自定义插件来扩展gSOAP的
功能。
这些插件可以用于添加新的协议支持、安全性、日志记录、
性能优化等功能。
开发人员可以根据自己的需求编写插件,然后将
其集成到gSOAP中,从而实现定制化的Web服务开发。
通过gSOAP插件机制,开发人员可以轻松地扩展gSOAP的功能,而无需修改gSOAP的源代码。
这为开发人员提供了更大的灵活性和
可定制性,使他们能够更好地满足各种不同的需求。
总之,gSOAP插件机制为开发人员提供了一种灵活的方式来扩
展和定制gSOAP的功能,使他们能够更好地满足各种不同的需求。
这种灵活性和可定制性使得gSOAP成为一个强大而又灵活的Web服
务开发工具。
gSOAP中文文档1、背景转贴2 gSOAP文档翻译计划2.1 gSOAP文档翻译计划(序)前一阵子需要在unix c平台下创建一个webservice应用。
头痛之余,上网查询相关资料,偶然发现了gSOAP开发包。
于是乎立即下载试用了一下,效果很好。
在它的帮助下,我很快完成了webservice应用的设计开发工作。
今天,心里突然升起一个念头:为何不把整个gSOAP的帮助文档翻译一下呢?一来可以方便与其他同仁的交流;二来也可以更好的理解gSOAP的原理与思想。
只是此项工程工作浩繁,须怀有革命的大无畏精神尚可完成也。
如今唯先写一序,实则有督促之意耳。
2.2 gSOAP文档翻译计划(1、介绍)1.介绍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使编写web服务的工作最小化了。
gSOAP编译器生成SOAP的代码来序列化或反序列化C/C++的数据结构。
gSOAP包含一个WSDL生成器,用它来为你的web服务生成web服务的解释。
gSOAP的解释器及导入器可以使用户不需要分析web服务的细节就可以实现一个客户端或服务端程序。
下面是gSOAP的一些特点:●gSOAP编译器可以根据用户定义的C和C++数据结构自动生成符合SOAP的实例化代码。
●gSOAP支持WSDL 1.1, SOAP 1.1, SOAP 1.2, SOAP RPC 编码方式以及literal/document 方式.●gSOAP是少数完全支持SOAP1.1 RPC编码功能的工具包,包括多维数组及动态类型。
比如,一个包含一个基类参数的远程方法可以接收客户端传来的子类实例。
子类实例通过动态绑定技术来保持一致性。
●gSOAP 支持 MIME (SwA) 和 DIME 附件包。
●gSOAP是唯一支持DIME附件传输的工具包。
它允许你在保证XML可用性的同时能够以最快的方式(流方式)传递近乎无大小限制的二进制数据。
●gSOAP 支持 SOAP-over-UDP。
●gSOAP 支持 IPv4 and IPv6.●gSOAP 支持 Zlib deflate and gzip compression (for HTTP, TCP/IP,and XML file storage)。
●gSOAP 支持 SSL (HTTPS)。
●gSOAP 支持 HTTP/1.0, HTTP/1.1 保持连接, 分块传输及基本验证。
●gSOAP 支持 SOAP 单向消息。
●gSOAP 包含一个 WSDL 生成器,便于web服务的发布。
●gSOAP 包含一个WSDL解析器 (将WSDL转换为gSOAP头文件),可以自动化用户客户端及服务端的开发。
●生成可以单独运行的web服务及客户端程序。
●因为只需要很少内存空间,所以可以运行在类似Palm OS, Symbian,Pocket PC的小型设备中。
●适用于以C或C++开发的web服务中。
●跨平台:Windows, Unix, Linux, Mac OS X, Pocket PC, Palm OS, Symbian等。
●支持序列化程序中的本地化C/C++数据结构。
●可以使用输入和输出缓冲区来提高效率,但是不用完全消息缓冲来确定HTTP消息的长度。
取而代之的是一个三相序列化方法。
这样,像64位编码的图像就可以在小内存设备(如PDA)中以DIME附件或其他方式传输。
●支持C++单继承,动态绑定,重载,指针结构(列表、树、图、循环图,定长数组,动态数组,枚举,64位2进制编码及16进制编码)。
●不需要重写现有的C/C++应用。
但是,不能用unions,指针和空指针来作为远程方法调用参数的数据结构中元素。
●三相编组:1)分析指针,引用,循环数据结构;2)确定HTTP消息长度;3)将数据序列化位SOAP1.1编码方式或用户定义的数据编码方式。
●双相编组:1)SOAP解释及编码;2)分解“forward”指针(例如:分解SOAP中的href属性)。
●完整可定制的SOAP错误处理机制。
●可定制的SOAP消息头处理机制,可以用来保持状态信息2.3 gSOAP文档翻译计划(2、符号规定)懒得翻译了,因为也不能再现出原来的版式。
后面章节中分别注明吧。
2.4 gSOAP文档翻译计划(3)gSOAP2.5版与gSOAP 2.4版(或以前版本)的不同按照WS-I Basic Profile 1.0a的要求,gSOAP2.5及以上版本默认使用SOAP RPC文字。
这不需要去关心,因为WSDL解析器wsdl2h在你提供一个WSDL文档时,会自动注意这些不同点。
增加了一个soapcpp2编译器的编译选项 -e ,用来保持与gSOAP2.4及以前版本的兼容性。
2.5 gSOAP文档翻译计划(4)gSOAP2.2版与gSOAP 2.1版(或以前版本)的不同如果你是从2.1版升级到2.2或以后版本,请注意这些变化。
为了能够分离传输、内容编码、映射中的接收/发送设置,改变了运行时选项及标志。
这些标志分布再四个类中:传输(IO),内容编码(ENC,XML编组(XML)及C/C++数据映射。
不再提倡使用旧标志soap_disable_X及soap_enable_X(其中,X表示选项名)。
具体内容请参见9.12节。
2.6 gSOAP文档翻译计划(5)gSOAP2.x版与gSOAP 1.x版的不同,如果你是从1.x版升级到2.x版,请注意下面的内容。
gSOAP2.0及之后的版本是在1.x版基础上重写的。
gSOAP2.0之后的版本是线程安全的,但之前版本不是。
gSOAP2.x版本中的主要文件已经重新命名,以便与1.x版区分。
gSOAP 1.X gSOAP 2.Xsoapcpp soapcpp2soapcpp.exe soapcpp2.exestdsoap.h stdsoap2.hstdsoap.c stdsoap2.cstdsoap.cpp stdsoap2.cpp从1.x版升级到2.x版并不需要进行大量的代码重写工作。
所有2.x版相关的函数都定义在stdsoap2.c[pp]文件中,这个文件是由gSOAP编译器自动生成的。
所以,用1.x版开发的服务端或客户端代码需要进行修改以适应2.x版中函数的变化:在2.x版中,所有的gSOAP函数都增加了一个参数用来保存一个gSOAP 运行环境实例。
这个参数包括了文件描述,表,缓冲,标志位等,它在所有gSOAP 函数中都是第一个参数。
gSOAP运行环境实例是一个struct soap类型的变量。
当客户端程序访问远程方法前或当服务端程序能够接收一个请求前,必须先将这个运行环境变量初始化。
在2.x版中新增了3个函数来负责这些事情:函数解释soap_init(struct soap *soap) 初始化环境变量(只需执行一次)struct soap *soap_new() 定义并初始化环境变量并返回一个该变量的指针struct soap *soap_copy(struct soap *soap) 定义一个环境变量并从已有的环境变量中拷贝环境信息环境变量定义好后就可以重复使用而不必再次初始化了。
只有当线程独占访问时,我们才需要一个新的环境变量。
例如,下面的代码分配了一个用于多个远程方法的环境变量:int main(){struct soap soap;soap_init(&soap); // 初始化环境变量...soap_call_ns__method1(&soap, ...); // 调用一个远程方法soap_call_ns__method2(&soap, ...); // 调用另一个远程方法soap_end(&soap); // 清除环境变量}我们也可以像下面这样定义环境变量:int main(){struct soap *soap;soap = soap_new(); // 定义并初始化环境变量if (!soap) // 如果不能定义,退出soap_call_ns__method1(soap, ...); // 调用远程函数soap_call_ns__method2(soap, ...); // 调用另一个远程函数 soap_end(soap); // 清除环境变量free(soap); // 释放环境变量空间}服务端代码在调用soap_serve函数前,需要定义相关环境变量: int main(){struct soap soap;soap_init(&soap);soap_serve(&soap);}或者像下面这样:int main(){soap_serve(soap_new());}soap_serve函数用来处理一个或多个(当允许HTTP keep-alive时,参见18.11节中的SOAP_IO_KEEPALIVE标志)请求。
一个web服务可以用多线程技术来处理请求:int main(){struct soap soap1, soap2;pthread_t tid;soap_init(&soap1);if (soap_bind(&soap1, host, port, backlog) < 0) exit(1);if (soap_accept(&soap1) < 0) exit(1);pthread_create(&tid,NULL, (void*(*)(void*))soap_serve,(void*)&soap1);soap_init(&soap2);soap_call_ns__method(&soap2, ...); // 调用远程方法soap_end(&soap2);pthread_join(tid, NULL); // 等待线程结束soap_end(&soap1); // 释放环境变量}在上面的例子中,需要两个环境变量信息。