数据读取服务基于gsoap的服务发布
- 格式:docx
- 大小:372.39 KB
- 文档页数:9
使用gSOAP进行Webservice开发总结1.概述Web service是创建可互操作的分布式应用程序的新平台。
Web service 的主要目标是跨平台的可互操作性。
为了达到这一目标,Web service 是完全基于XML、XSD等独立于平台、独立于软件供应商的标准的。
Web service在应用程序跨平台和跨网络进行通信的时候是非常有用的。
Web service 适用于应用程序集成、B2B集成、代码和数据重用,以及通过Web进行客户端和服务器的通信的场合。
南京内容与资源管理中心需要为第三方提供DNA识别的接口,由于第三方可能位于不同的局域网中,运行于不同的平台,以及第三方形式多样化,为此提供一种通用的接口至关重要。
鉴于Web service在跨平台,跨网络方面的出色表现,南京内容与资源管理中心需要采用Web service为第三方提供DNA识别接口。
南京内容与资源管理中心采用C/C++ 实现,如何快速的实现Web service接口呢?开源项目gsoap为此提供了很好的解决方案。
2.gSOAP介绍gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端。
由于gSOAP 具有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SOAP服务。
gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。
这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。
gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。
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盘)。
Android与服务器端数据交互(基于SOAP协议整合android+webservice)上一节中我们通过http协议,采用HttpClient向服务器端action 请求数据。
当然调用服务器端方法获取数据并不止这一种。
WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。
我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF 等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP 已经提供了基于android版本的jar包了,那么我们就开始吧:首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包然后新建android项目:并把下载的KSOAP包放在android项目的lib目录下:右键->build path->configure build path--选择Libraries,如图:以下分为七个步骤来调用WebService方法:第一:实例化SoapObject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。
如:View Code//命名空间private static final String serviceNameSpace="";//调用方法(获得支持的城市)private static final String getSupportCity="getSupportCity";//实例化SoapObject对象SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);第二步:假设方法有参数的话,设置调用方法参数request.addProperty("参数名称","参数值");第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):View Code//获得序列化的EnvelopeSoapSerializationEnvelope envelope=new SoapSerializ ationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=request;第四步:注册Envelope,(new MarshalBase64()).register(envelope);第五步:构建传输对象,并指明WSDL文档URL:View Code//请求URLprivate static final String serviceURL="";//Android传输对象AndroidHttpTransport transport=new AndroidHttpTrans port(serviceURL);transport.debug=true;第六步:调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):View Codetransport.call(serviceNameSpace+getWeatherbyCityName, envel ope);第七步:解析返回数据:View Codeif(envelope.getResponse()!=null){return parse(envelope.bodyIn.toString()); }/*************** 解析XML* @param str* @return*/private static List<String> parse(String str){String temp;List<String> list=new ArrayList<String>();if(str!=null && str.length()>0){int start=str.indexOf("string");int end=stIndexOf(";");temp=str.substring(start, end-3);String []test=temp.split(";");for(int i=0;i<test.length;i++){if(i==0){temp=test[i].substring(7);}else{temp=test[i].substring(8);}int index=temp.indexOf(",");list.add(temp.substring(0, index));}}return list;}这样就成功啦。
文章标题:深度解析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格式返回给客户端。
SOAP协议数据SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,用于在分布式环境中交换结构化信息。
它提供了一种标准化的方式来实现不同平台、不同编程语言之间的通信。
本文将详细介绍SOAP协议数据的概念、结构和使用方式。
1. SOAP协议数据概述SOAP协议数据是指在SOAP消息中传输的信息。
它由XML元素组成,包含了请求或响应的内容。
SOAP协议数据通过网络传输,并在接收端进行解析和处理。
SOAP协议数据具有以下特点: - 结构化:SOAP协议数据使用XML格式表示,可以定义复杂的数据结构。
- 独立性:SOAP协议数据与具体的编程语言和平台无关,可以在不同系统之间进行交互。
- 可扩展性:SOAP协议允许定义自定义扩展,以满足特定需求。
2. SOAP协议数据结构SOAP协议数据由以下几个主要部分组成:2.1 Envelope元素Envelope元素是SOAP消息的根元素,它包含了Header和Body两个子元素。
Header用于传递与消息处理相关的信息,而Body包含实际的请求或响应内容。
<soap:Envelope xmlns:soap=""><soap:Header><!-- 可选的Header信息 --></soap:Header><soap:Body><!-- 请求或响应内容 --></soap:Body></soap:Envelope>2.2 Header元素Header元素用于传递与消息处理相关的信息,如身份验证凭据、安全策略等。
它可以包含多个子元素,每个子元素表示一个特定的头部信息。
<soap:Header><header1>value1</header1><header2>value2</header2></soap:Header>2.3 Body元素Body元素包含实际的请求或响应内容。
gsoap使用小结gSoap使用小结分类:开发路上的点点滴滴 2012-03-30 11:33 3564人阅读评论(2) 收藏举报webservicesoapauthorizationnull工具c下载gSoap1.下载完成后直接解压缩,在目录gsoap-2.8\gsoap\bin下面有编译工具,支持多个平台,我们使用的是win32平台的工具wsdl2h.exe 解析WebService的wsdl文件soapcpp2.exe 编译WebService代码2.接下来需要先获得WebService的wsdl文件,访问WebService时,http://XXXX/XXXX.asmx?wsdl这个地址就是需要的wsdl文件,选择查看源文件,然后另存为的方式,获取到wsdl文件,例如:另存为webs.wsdl文件。
3.解析wsdl文件执行wsdl2h.exe -o webs.wsdl命令,就会生成一个webs.h的头文件这里简单说一下参数,主要常用的是-o和-c,-o后面跟的文件名是需要生成的文件名。
-c表示生成纯C的头文件,否则默认是C++。
具体参数可以运行wsdl2h.exe /?查看帮助。
4.编译执行soapcpp2.exe webs.h,会生成很多个文件,这里同样可以加一些参数,具体不解释了,可以通过soapcpp2.exe /?命令来查看。
我们找出需要的以下几个文件:soapC.cppsoapClient.cppsoapH.hsoapStub.hWebsSoap.nsmap再加上另外两个文件(不在bin目录下,在gsoap-2.8\gsoap目录下):stdsoap2.hstdsoap2.cpp一共7个文件,就是我们最终访问WebService所需要的soap访问调用文件。
这里是C++的代码,根据需要,也可以生成C的代码,stdsoap2.cpp更换为stdsoap2.h文件。
把上述7个文件,加入到自己的工程中编译即可,接下来就是如何调用的问题了。
soap协议请求工具类
SOAP(Simple Object Access Protocol)是一种用于交换结构化信息的协议,通常基于HTTP、HTTPS、SMTP等传输协议。
SOAP协议请求工具类通常用于创建、发送和处理SOAP请求,以下是一些常见的SOAP协议请求工具类:
1. Apache CXF,Apache CXF是一个开源的Web服务框架,提供了丰富的工具和类库用于处理SOAP请求。
它支持从WSDL文件生成客户端代码,并提供了简单的API用于创建和发送SOAP请求。
2. JAX-WS,Java API for XML Web Services(JAX-WS)是Java EE平台的一部分,提供了用于开发和部署Web服务的API。
它包含了一些工具类和注解,可以用于创建和处理SOAP请求。
3. Spring Web Services,Spring Web Services是一个基于Spring框架的Web服务开发工具,它提供了简单的API和工具类用于处理SOAP请求。
它支持从XSD文件生成Java类,并提供了方便的方式来创建和发送SOAP请求。
4. Axis2,Apache Axis2是一个开源的Web服务框架,提供了
丰富的工具和类库用于处理SOAP请求。
它支持从WSDL文件生成客户端代码,并提供了简单的API用于创建和发送SOAP请求。
这些工具类和框架都可以帮助开发人员轻松地处理SOAP请求,从而简化了Web服务的开发和集成过程。
它们提供了丰富的功能和灵活的配置选项,可以满足不同场景下的需求。
当然,选择合适的工具类取决于具体的项目需求和开发团队的技术栈。
希望这些信息能够帮助到你。
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的服务发布一、主要流程1)制作服务头文件2)使用gsoap生成相应文件3)建立工程与编译4)测试一、制作服务头文件头文件制作需要根据服务的功能来制作。
由自己书写,比如要传入一个文件名,返回一个读取的数据文件数据块。
//gsoap ns service name: ImageServer//gsoap ns service namespace: http://localhost/ImageServer.wsdl//gsoap ns service location: http://ImageServer//gsoap ns service executable: ImageServer.cgi//gsoap ns service encoding: encoded//gsoap ns schema namespace: urn:ImageServerstruct xsd__base64Binary{unsignedchar *__ptr;int__size;};int ns__ImageServer(char* fileName, struct xsd__base64Binary&ret);说明:上述每一行都加上。
//gsoap ns service name: ImageServer 指定服务名称//gsoap ns service namespace: http://localhost/ImageServer.wsdl发布地址//gsoap ns schema namespace: urn:ImageServer架构名称这些内容主要用于生成WDSL文件,相应的内容可能还会有变最主要的内容是struct xsd__base64Binary{unsignedchar *__ptr;int__size;};int ns__ImageServer(char* fileName, struct xsd__base64Binary&ret);其中xsd_base64Binary定义了一个返回结构。
注意:因为gsoap只允许一个返回值,因此,多返回值需要用到结构返回。
文件制作完成则保存为imageserver.h二、使用gsoap生成相应的文件相应的作法是在下载的gsoap目录下新建一个目录。
将soapcpp2.exe拷入。
此文件可以从bin中找到目录中只有两个文件即Soapcpp2.exeImagewerver.h进入命令行方法,进入当前目录运行soapcpp2.exe imageserver.h 回车当imagerserver.h没有错误时,将生成一系列文件命令行将生成如此信息。
在此目录下,将生成以下文件三、建立工程与编译1、建立服务器端工程打开VC++建立一个命令行工程。
将相应.h和.cpp文件加入注意需要将gsoap目录下的stdsoap2.h cpp文件加入到目录下。
生成的工程文件列表如图其中T3DPD_FileDBMapping文件不是自动生成的,此处为后来的读取服务所用。
生成的文件中并不存在ImgServer.cpp文件使用自己增加,完成如下:#include"ImageServer.nsmap"#include"FreeImage.h"#include"T3DPD_FileDBMapping.h"/** Generic image loader@param lpszPathName Pointer to the full file name@param flag Optional load flag constant@return Returns the loaded dib if successful, returns NULL otherwise*/FIBITMAP* GenericLoader(constchar* lpszPathName, int flag) {FREE_IMAGE_FORMATfif = FIF_UNKNOWN;fif = FreeImage_GetFileType(lpszPathName, 0);if(fif == FIF_UNKNOWN) {// no signature ?// try to guess the file format from the file extensionfif = FreeImage_GetFIFFromFilename(lpszPathName);}// check that the plugin has reading capabilities ...if((fif != FIF_UNKNOWN) &&FreeImage_FIFSupportsReading(fif)) {// ok, let's load the fileFIBITMAP *dib = FreeImage_Load(fif, lpszPathName, flag);// unless a bad file format, we are done !return dib;}return NULL;}////server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数int ns__ImageServer(struct soap *add_soap, char* fileName, struct xsd__base64Binary&ret) {if (fileName != NULL){std::stringpFileName(fileName);char exeFullPath[MAX_PATH]; // Full pathstd::stringstrPath = "";GetModuleFileName(NULL,exeFullPath,MAX_PATH);strPath=(std::string)exeFullPath; // Get full path of the fileint pos = strPath.find_last_of('\\', strPath.length());std::stringsPath = strPath.substr(0, pos); //std::stringsFileName =sPath+ +"\\"+pFileName;FIBITMAP* image = NULL;//GenericLoader(sFileName.c_str(),0);if (image == NULL){CT3DPD_FileDBMappingpImgFile;pImgFile.OpenForRead(sFileName);ret.__size = pImgFile.GetSize();BYTE* pData = new BYTE[ret.__size];ret.__ptr = (unsignedchar *)soap_malloc(add_soap,ret.__size);pImgFile.GetBlockData(0,ret.__size,pData);memset(ret.__ptr, 0, ret.__size);memcpy(ret.__ptr, pData, ret.__size); /*src_ptr为源数据块指针*/pImgFile.Close();}else{ret.__ptr = (unsignedchar *)FreeImage_GetBits(image);}return SOAP_OK;}return 1;}void main(int argc, char* argv){struct soapsoap;int m, s; // master and slave socketssoap_init(&soap);m = soap_bind(&soap, NULL, 18083, 100);if (m< 0)soap_print_fault(&soap, stderr);else{fprintf(stderr, "Socket connection successful: master socket = %d\n", m);for (int i = 1; ; i++){s = soap_accept(&soap);if (s< 0){soap_print_fault(&soap, stderr);break;}fprintf(stderr, "%d: accepted connection from IP=%d.%d.%d.%d socket=%d", i,(soap.ip>> 24)&0xFF, (soap.ip>> 16)&0xFF, (soap.ip>> 8)&0xFF, soap.ip&0xFF, s);if (soap_serve(&soap) != SOAP_OK) // process RPC requestsoap_print_fault(&soap, stderr); // print errorfprintf(stderr, "request served\n");soap_destroy(&soap); // clean up class instancessoap_end(&soap); // clean up everything and close socket}}soap_done(&soap); // close master socket and detach context}注意:本文使用的是stand alone的方法进行服务发布,即通过http://localhost:18083端口访问的方式。
注意:imagerserver.h imageserver.nsmp等文件需要能访问到,可以直接放到工程源文件目录下。
客户端工程与服务器端类似,使用VC创建一个工程,并将相应的内容加载进同样,T3DPD系列文件是后面为应用需要增加。
ImgClient.cpp不是自动生成的。
需要手工创建代码如下:#include<stdio.h>#include<stdlib.h>#include"soapH.h"#include"ImageServer.nsmap"#include"T3DPD_FileDBMapping.h"int GetImg(constchar* server,char* fileName,struct xsd__base64Binary&r);int main(int argc, char **argv){int result = -1;char* server="http://localhost:18083";int num1 = 0;int num2 = 0;int sum = 0;char p[] ="world.tif";struct xsd__base64Binary_r;result = GetImg(server, p,_r);if (result != 0){printf("soap err,errcode = %d\n", result);}else{printf("Read scuessful!\n");}return 0;}int GetImg(constchar* server,char* fileName,struct xsd__base64Binary&r){struct soapadd_soap;int result = 0;soap_init(&add_soap);//该函数是客户端调用的主要函数,后面几个参数和add.h中声明的一样,前面多了个参数,函数名是接口函数名ns__add前面加上soap_call_soap_call_ns__ImageServer(&add_soap,server,"",fileName,r);CT3DPD_FileDBMappingpImgSave;char p1[]="e:\\world2.tif";pImgSave.OpenForWriter(p1);pImgSave.SetBlockDate(0,r.__size,r.__ptr);pImgSave.Close();if(add_soap.error){printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap),*soap_faultstring(&add_soap) );result = add_soap.error;}soap_end(&add_soap);soap_done(&add_soap);return result;}分别编译成两个可执行文件。