基于gSOAP的WebService开发指导说明文档

基于gSOAP的WebService开发指导说明文档
基于gSOAP的WebService开发指导说明文档

基于gSOAP的WebService

开发指导说明书

1简介

1.1目的

本文通过给出gSOAP库的基本使用样例,帮助开发人员进行WebService相关的开发

1.2范围

本文只包含gSOAP库C++版本的基本使用样例,不包含其他高级使用或C版本的使用方式

1.3名词解释

1.4参考资料

2准备工作

2.1gSOAP库

很显然,要想基于gSOAP库开发WebService应用,你需要首先获取gSOAP库。

gSOAP库是一个开源库,你可以在以下网址进行下载:

https://www.360docs.net/doc/af18695229.html,/project/showfiles.php?group_id=52781

如果链接失效,也可以去一个介绍gSOAP的网站上查看最新下载地址:

https://www.360docs.net/doc/af18695229.html,/~engelen/soap.html

本文所用的版本为(soapcpp2):

下载下来以后解压缩,你会得到这么一个目录:

其中gsoap目录有以下结构:

注意这两个文件:stdsoap2.h和stdsoap2.cpp,我们编写gSOAP程序的时候是需要它们的。还要注意的是bin\win32目录下的两个可执行文件:soapcpp2.exe和wsdl2h.exe,目前我们只需要soapcpp2.exe。

也就是说,要使用gSOAP,我们需三个文件:

解压目录\gsoap-2.8\gsoap\ stdsoap2.h

解压目录\gsoap-2.8\gsoap\ stdsoap2.cpp

解压目录\gsoap-2.8\gsoap\bin\win32\ soapcpp2.exe

使用gSOAP不需要在程序中添加额外的库,而是要通过工具生成并包含额外的文件。接下来,我们通过一个实例去了解如何使用gSOAP提供的这三个文件。

3创建一个WebService服务端工程

gSOAP使用了代码生成器帮助我们生成一些辅助性的框架与类,所以我们想要使用gSOAP,则需要做一些额外的工作。

下面我们就从零开始构建一个使用gSOAP的服务端工程。

3.1新建一个工程

这一步没什么难度,使用VS直接新建一个工程即可。

我们可以建立任意的C++工程,为了可以未来和Qt进行结合,我们新建一个QtApplication:

解决方案名字,工程名,类名与Widget类型不重要,我们可以随意决定。

于是,我们创建的工程树与目录结构如下:

为了使用gSOAP,我们需要向我们的工程目录下拷贝一些必要的文件:

它们原本所在的地方为:

解压目录\gsoap-2.8\gsoap\ stdsoap2.h

解压目录\gsoap-2.8\gsoap\ stdsoap2.cpp

解压目录\gsoap-2.8\gsoap\bin\win32\ soapcpp2.exe

3.3写WebService接口函数

gSOAP可以使我们像是用本地函数一样调用WebService,所以我们首先要做的就是定义WebService接口函数,新建一个头文件,名字随意(我们使用soapInterface.h),然后按照以下格式书写函数:

注意:前三行的注释是必要的,并且必须符合语法规则,其中ns表示的是WebService 的基本命名空间,默认ns即可,而冒号后面,则是以下含义:

●//gsoap ns service name: WebService的名字,随意即可,它只关系到最

终生成的文件和类的名字,只要符合其实际的含义,名字随意

●//gsoap ns service protocol: WebService所用协议,默认SOAP即可

●//gsoap ns service style:WebService类型,默认rpc即可,表示使用远

程调用

●事实上,只有第一行注释是有意义的,剩下两行都如果不存在则会使用默认值

——那其实就是我们定义的值,但是为了更加清晰,最好可以使用全部的三行

注释(事实上,完整的注释有更多行,但是尚未清楚其意义。)

然后,包含必要的头文件,使得函数声明合法。(例如,为了使用std::string,我们需要包含string头文件)

注意:不支持Qt类,不支持const引用参数,不支持标准库中的容器。

最后,就是一条一条地定义WebService方法了,其中,方法名,参数与返回值要符合以下规则:

●返回值必须是int

●函数名必须要以基本命名空间开头,命名空间后面必须要加两个下划线,两个

下划线后面就可以跟随任意的符合命名规范的函数名了

●参数必须至少有1个

●最后一个参数表示WebService的返回值,它必须是指针或者引用(因为只有这

样我们才能在函数内部修改这个值)

其他需要注意的地方:

你可以定义多个符合规则的接口文件,这样子会产生多个WebService服务。但是请不要将同一个WebService的接口在多个文件中定义,也不要为不同的WebService服务起相同的名字。

3.4写一个方便我们使用的批处理文件

soapcpp2.exe使用命令行参数的形式生成文件,为了方便我们可以“一键操作”,我们写一个批处理文件BuildSOAP.bat,内容如下:

@echo off

mkdir gSOAP

soapcpp2.exe -i -dgSOAP soapInterface.h

pause

其中,soapInterface.h就是我们刚刚定义好的WebService函数接口,如果存在多个函数接口,则可以写多行相似的命令

-dgSOAP则表示要将soapcpp2.exe生成的文件放到gSOAP目录下,这样方便我们将自己的代码与soapcpp2.exe生成的代码分离开(在目录前附加-d即表示输出目录,注意,-d与目录名之间没有空格)

加-i表示我们要生成C++类,方便我们使用这个服务。

然后我们就可以执行这个批处理文件了,执行完毕后,我们去gSOAP目录下,可以看到以下的生成文件:

3.5完善工程树

生成完毕后,我们需要将以下文件加入工程树中:soapC.cpp,为了和我们自己写的代码加以区分,我们新建一个Filter:gSOAP,将这些文件加进去:

我们不需要添加头文件,因为在cpp里面已经包含了,VS会自动找到那些头文件的。

注意,别忘记之前拷贝进来的两个文件stdsoap2.h,stdsoap2.cpp,我们需要把stdsoap2.cpp也加入工程树中,否则编译时会报错,提示很多函数未实现

我们还要再添加一个文件,这个文件就是自动生成的服务的类实现soapEchoService.cpp,没有它,编译时会提示服务类相关的函数未实现

3.6实现服务的逻辑

至此,我们的基本工程树就构建完成了,下一步我们要做的就是实现WebService

方法。

我们添加一个新的文件EchoService.hpp,它将补全一些自动生成无法实现的逻辑——我们声明的服务接口的实现

注意:

●需要包含两个文件,一个是gSOAP自动生成的类声明,一个是命名空间表。其

中,类声明头文件的命名方式是soap开头,服务名在中间,并以Service结尾。

在某些情况下,它可能不是soap开头的,但是肯定是服务名在中间并以Service

结尾。

●如果实在不知道头文件或命名空间表的名字,请去生成目录下查看。

●两个包含的文件,他们是不需要在工程树中包含的,只需要在代码里包含即可。

当然,为了可以方便函数的查找,也可以将其加入工程树中。

●gSOAP自动生成的类中,函数没有命名空间与两个下划线的前缀(ns__)。

●如果函数执行正确,我们就可以返回SOAP_OK(也就是0),否则,返回一个

自定义的错误代码。

●如果定义了多个接口,则需要写多个文件来实现这些接口。(尽量不要将不相

关的两个服务在同一个文件里实现)

3.7在一个独立的线程中启动服务

至此,服务逻辑已经完毕了,接下来我们需要再添加一些代码,使WebService服务可以作为一个独立的程序运行。

我们新建一个继承了QThread的类EchoServer,然后我们实现run方法:

注意包含我们添加的实现了服务类接口的文件,否则我们肯定无法使用服务类。然后我们就可以在main函数中启动这个线程了:

启动程序,然后在浏览器中输入我们的服务地址:http://localhost:8080/测试一下

我们接收到了一个错误的返回,因为我们的服务不支持HTTP的GET调用。

我们再查看一下log文件中的记录:

与浏览器接收到的错误消息一致,至此,表明服务端已经正常启动了。

下面,我们就可以写一个客户端来测试服务端的逻辑是否正确了。

4创建一个WebService客户端工程

创建WebService客户端工程的步骤与服务器端的步骤在前几步中都是一样的,所以在此我们省略一些步骤

4.1新建一个工程

参考3.1

4.2拷贝必要的文件

参考3.2

4.3使用写好的WebService接口函数

客户端不需要也不能重新定义WebService接口函数,于是我们需要直接使用服务端定义好的接口函数。

4.4写一个方便我们使用的批处理文件

参考3.4

4.5完善工程树

首先参考3.5,然后请注意以下的情况:

客户端的工程树与服务端几乎一模一样,唯一不同的是我们不需要

soap****Service.cpp文件,而是soap****Proxy.cpp文件,它是客户端的代理类,方便我们访问服务:

注意:客户端不需要soap****Service.cpp文件,但是真的添加上了也没什么问题。

4.6实现客户端逻辑

为了简化,我们直接在服务器工程中实现我们的客户端——因为服务器在另一个线程中,所以我们在主线程里实现客户端逻辑也是没什么问题的。

是时候让我们的主界面起点作用了,我们添加服务的两个接口的GUI调用界面:

然后实现这些界面逻辑以及调用服务代理类(我们只看关键点):

首先是声明代理类的对象:

其次是指定服务的URL:

最后是调用服务接口的方式(直接调用函数即可):

然后我们运行一下,看看结果如何:

正确的时候,返回值一切正常,但是错误的时候却出现问题。

虽然目前没有错误提示信息,但目前为止,我们已经初步的实现了WebService的客户端的创建了。

5完善错误提示信息

上面我们完成了客户端与服务端,但是却没有正确的错误提示。

gSOAP为我们准备了在错误时返回错误消息的方法:soap_receiverfault,它的第一个参数是错误消息,第二个参数是详细信息。

我们略微修改一下之前的服务器端代码:

客户端代码也略微修改一下:

注意:如果你要是用中文,请注意在发送时先转化为UTF8编码的C字符串,并且在接收端统一使用QString::fromUtf8函数接受,直接使用中文C字符串或std::string构造中文字符串将导致接受时出现乱码。

然后我们检查一下例子:

注意,如果你使用控制台窗口,则它的打印信息中中文会是乱码:

这是正常现象,因为我们将错误信息输出到了std::cerr流中,而流不会自动转码。

我们看一下log文件:

Log文件中,中文显示正常。

SAP开发webservice接口教程

SAP开发webservice接口教程 在client=100中进行开发: 1.创建RFC函数 SE80,在函数组下,右击->创建,创建函数模块,填写函数模块名称及描述。 2.函数属性标签页,选择“远程启用的模块”,其余默认不变。 3.函数导入标签页,需要添加调用时传入的参数(表),“传递值”需勾选。 表类型:ZSHR_EMPLOYEER_T (需要自己创建) 行类型:ZSHR_EMPLOYEER (需要自己创建)

4.函数导出标签页,需要添加调用返回的参数(表),“传递值”需勾选。 表类型:ZSHR_EMPLOYEER_OUT_T (需要自己创建) 行类型:ZSHR_EMPLOYEER_OUT (需要自己创建) 5.函数源代码标签页,需要写代码实现把传入的数据保存在透明表中。 至此,函数创建完成。 6.创建Web Services 右击包名创建企业服务,进入如下页面,选择“Service Provider”,因为我们是服务提供者,点击“继续”。

7.选择“Existing ABAP Object (Inside Out)”,点击“继续”。 8.给服务起名,并填写描述,点击“继续”

9.选择“Function Module”,点击“继续”。 10.填写我们第一步创建的函数,并勾选“Map Name”,点击“继续”。 11.SOAP Appl默认不变,Profie下拉框选择第四个选择,即不进行权限认证。点击“继续”。 12.填写对于的包和请求,点击“继续”。 下一步,直接点击“完成”。服务创建成功。

13.配置SOA 使用T-CODE:soamanager,进入web页面的SOA管理(client=100)。 14.点击“简化Web服务配置”,进入如下设置页面,点击“执行”,从列表中找到自己创建的 服务,勾选第一个checkbox,User Name/Password(basic),点击列表左上角的“保存”,之后页面右上角的“返回”按钮,返回首页。 这一步设置,代表我们只设置用户名/密码的调用认证方式。

gsoap2.8.11实现onvif discover详细教程

感谢 以下教程基本是(沙漠之鸽)给予我的指导的整理而来,他非常耐心的提供了帮助,也是受于他的分享精神,所以写下了这遍教程。 前言: 做onvif的过程十分痛苦,什么wsdl,soap,webserver,全部都是没有接触过的,还好有gsoap可以用,在网上和群共享里面只有2.8.3版本实现过程,而且比较麻烦的是要自己实现probe所有细节。 在2.8.11中,wsddapi插件为我们设计好了wsdd的接口,我们要做的就是填充brobe的matches信息就可以了。简化了开发过程,也不必用高手们做的typemap 文件,因为这些看不懂的文件让我们对做出的程序毫无信心。 生成.h文件。 我们需要从onvif官网下载wsdl文件,和onvif.xsd文件。然后生成.h文件 wsdl2h -sck -t /opt/nfshost/gsoap-2.8/gsoap/typemap.dat -o onvif.h analytics.wsdl analyticsdevice.wsdl devicemgmt.wsdl display.wsdl event.wsdl imaging.wsdl media.wsdl ptz.wsdl receiver.wsdl recording.wsdl remotediscovery.wsdl replay.wsdl search.wsdl deviceio.wsdl 这一步你会发现生成速度非常慢,还会提示找不到onvif.xsd,速度慢得原因是wsdl2h会根据wsdl中引用去网上下载一下xsd和wsdl文件,我们可以将这些文件下载到本地,然后修改wsdl中的路径。 修改之前schemaLocation是一个url,如果你放的和你onvif的wsdl文件相同的目录中,这样写就ok了,如果不是,可以写上相对路径。

Webservice接口开发

Webservice接口开发 Author:Geloin

目录 1 准备工作 (1) 2 服务器端 (1) 2.1 主程序 (1) 2.2 services.xml (2) 2.3 传值方式 (3) 2.4 打包 (4) 2.5 发布 (6) 3 客户端 (8) 3.1 导入包 (8) 3.2 示例代码 (8) 3.3 代码解析 (10) 3.3.1 设定服务器地址 (10) 3.3.2 设定action (10) 3.3.3 设定要调用的方法名 (11) 3.3.4 设定客户端控件 (11) 3.3.5 设定命名空间 (11) 3.3.6 设定需要传送的值 (11) 3.3.7 设定返回数据类型 (11) 3.3.8 获取返回结果 (12)

1准备工作 至https://www.360docs.net/doc/af18695229.html,/axis2/下载axis2的bin及war包,分别解压之,在环境变量中添加AXIS2_HOM,将axis2.war放置到tomcat/webapps目录下,启动tomcat,用浏览器打开http://localhost:8080/axis2,如下图所示: 2服务器端 2.1主程序 服务器端可以是任何一个程序,例如下面的例子: public class Test { // 此程序返回一个字符串 public String test1(String arg) { return arg + “测试”; } // 此程序返回一个一维数组 public String[] test2(String arg) { String[] result = new String[]{arg}; return result;

【WebService】接口的测试方法

【WebService】接口的测试方法 有以下多种方式: 一、通过WSCaller.jar工具进行测试: 前提:知道wsdl的url。 wsCaller可执行程序的发布方式为一个wsCaller.jar包,不包含Java运行环境。你可以把wsCaller.jar复制到任何安装了Java运行环境(要求安装JRE/JDK 1.3.1或更高版本)的计算机中,用以下命令运行wsCaller: java -jar wsCaller.jar 使用wsCaller软件的方法非常简单,下面是wsCaller的主界面: 首先在WSDL Location输入框中输入你想调用或想测试的Web Service的WSDL位置,如“https://www.360docs.net/doc/af18695229.html,/axis/services/StockQuoteService?wsdl”,然后点“Find”按钮。wsCaller就会检查你输入的URL地址,并获取Web Service的WSDL信息。如果信息获取成功,wsCaller会在Service和Operation下拉列表框中列出该位置提供的Web Service服务和服务中的所有可调用的方法。你可以在列表框中选择你要调用或测试的方法名称,选定后,wsCaller窗口中间的参数列表框就会列出该方法的所有参数,包括每个参数的名

称、类型和参数值的输入框(只对[IN]或[IN, OUT]型的参数提供输入框)。你可以输入每个参数的取值。如下图: 这时,如果你想调用该方法并查看其结果的话,只要点下面的“Invoke”按钮就可以了。如果你想测试该方法的执行时间,则可以在“Invoke Times”框中指定重复调用的次数,然后再按“Invoke”按钮。wsCaller会自动调用你指定的方法,如果调用成功,wsCaller会显示结果对话框,其中包括调用该方法所花的总时间,每次调用的平均时间和该方法的返回值(包括返回值和所有输出型的参数)。如下图:

WSDL文件结构详解

wsdl文件结构分析 WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。本文将详细讲解WSDL文档的结构,并分析每个元素的作用。 一:WSDL定义 WSDL是一个用于精确描述Web服务的文档,WSDL文档是一个遵循WSDL XML模式的XML文档。WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。 一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。这些元素嵌套在definitions 元素中,definitions是WSDL文档的根元素。文章的下一部分将会详细介绍WSDL 的基本结构。 二:WSDL的基本结构--概述 如第一部分最后描述的那样,一个基本的WSDL文档包含7个重要的元素。下面将分别介绍这几个元素以及他们的作用。 WSDL 文档在Web服务的定义中使用下列元素: · Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。 · Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 · Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。 · PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。

c#-操作webservice(经典入门教程)

Web Service 的基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件(服务),使用WSDL文件进行(说明),并通过(UDDI)进行注册。 XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。 Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP 调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。 WSDL:(Web Services Description Language) WSDL 文件是一个XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。 UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。 概念补充: http soap关系 http:是一个客户端和服务器端请求和应答的标准(TCP)。http协议其目的是为了提供一种发布和接收htttp页面的方法 一http协议的客户端与服务器的交互:由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

SOAP病历

SOAP病历 患者,男性,65岁,因“反复发热、咳嗽1月余”就诊。 现病史:患者于1月前无明显诱因出现发热,体温在37.5~38.5℃,咳嗽,咯少许白痰,无咯血、盗汗、头痛、畏寒,无黄染,无咽痛,无恶心、呕吐,无腰酸、腰痛,无血尿,无尿频、尿急,无关节痛。在社区卫生服务中心就诊检查发现血常规:WBC 12.6×10^9/L,N 82%。胸片提示:右下肺少许斑片状影,诊断“左下肺炎”。给予“头孢呋辛 3.0 ivdrip bid、复方甘草合剂口服”治疗。用药3天后,体温略有下降,37~37.5℃,继续予头孢呋辛静滴治疗1周后,咳嗽症状略有改善,但患者再次出现发热,37.5℃~38℃,伴有咳嗽,无咯血、咳痰,发热时伴有下肢乏力。为进一步诊治来社区服务中心就诊。发病以来,睡眠欠佳,食欲一般,精神尚可,二便正常,体重明显减轻,半年内体重减轻4kg左右。 既往史:否认结核病、伤寒、肝炎等传染病史,否认重大手术史,否认药物食物过敏史。否认高血压、糖尿病等慢性病史。否认冶游史,已婚已育,育有1子,有烟酒史30年,20支/3天,少量饮酒,以饮黄酒为主。出租车司机退休在家,夫妻与儿子分开居住,夫妻关系和睦。平素喜肉食及辛辣食物。否认家族中存在糖尿病、高血压、结肠癌等遗传家族史。 体查:T 38℃,P 91次/分,R 18次/分,BP 126/74mmHg。神清,呼吸平顺,皮肤、黏膜无明显瘀点、瘀斑。浅表淋巴结未见明显肿大。咽无充血。双肺呼吸音粗,左下肺可闻及少许干湿啰音。心率 91次/分,律齐,各瓣膜未闻及杂音。腹平软,无压痛,未见明显包块,肝脾肋下未及,移动性浊音阴性,肠鸣音3~5次/分。四肢关节未见明显肿大及畸形,可见杵状指,四肢肌力肌张力正常,生理反射存在,病理反射未引出。 实验室及辅助检查: 血常规:WBC 12.6×10^9/L,N 82%,L 12%,M 3.1%,E 1.9%,HGB 135g/L,Plt 161×10^9/L; 尿常规:WBC(-),RBC (-),蛋白(-)。 胸片:左下肺少许斑片影,未见占位性病变。

用gSOAP调用Web Services

用gSOAP调用Web Services 1、配置gSOAP 从https://www.360docs.net/doc/af18695229.html,/project/showfiles.php?group_id=52781 下载gSOAP,解压后在gsoap\bin\win32里找到wsdl2h.exe 和soapcpp2.exe程序。通过这两个程序可以生成客户端需要的C/C++文件。这两个程序的使用方法: wsdl2h.exe: 编译wsdl文件生成c/c++头文件 -o 文件名,指定输出头文件 -n 名空间前缀代替默认的ns -c 产生纯C代码,否则是C++代码 -s 不要使用STL代码 -t 文件名,指定type map文件,默认为typemap.dat -e 禁止为enum成员加上名空间前缀

soapcpp2.exe: gSOAP编译器,编译头文件生成服务器和客户端都需要的c/c++文件 (如果使用STL,需要从压缩包里找到stlvector.h放到soapcpp2.exe目录下,否则运行失败) -C 仅生成客户端代码 -S 仅生成服务器端代码 -L 不要产生soapClientLib.c和soapServerLib.c文件 -c 产生纯C代码,否则是C++代码(与头文件有关) -I 指定import路径(见上文) -x 不要产生XML示例文件 -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp) 我写了个批处理:

wsdl2h -o xxxService.h "WSDL文件URL" soapcpp2 -C xxxService.h 如果是asmx,可以在URL后加"?WSDL" 来获取WSDL文件,它是一个XML,用来描述接口,它是与语言无关的,类似COM的IDL文件。 2、创建VC工程,把生成的文件拷到工程目录 生成的文件有: soapStub.h 从输入Header 文件生成的经过修改且带标注的Header 文件 soapH.h 主Header 文件,所有客户机和服务源代码都要将其包括在内 soapC.c 指定数据结构的序列化器和反序列化器 soapClient.c 远程操作的客户机存根例程 stdsoap2.h stdsoap2.cpp 运行时库的Header 文件

gsoap

实现高性能gsoap 服务 从队列中获取未处理的 socket,并从队列中移除 服务流程图 代码请参看gSOAP 2.8.14 User Guide 中的7.2.4 How to Create a Multi-Threaded Stand-Alone Service. listen : 监听soap_accept 方法,返回一个SOAP_SOCKET,然后交 SOAP_SOCKET 添加到队列,并发送一个信号通知process(处理线程)处理. process(处理线程)启动后立即阻塞(不是sleep )等待信号,收到信号后才执行相应的任务(soap_serve),执行任务后继续阻塞等待信号.注意:soap_serve 方法如果客户端提交的xml 文档格式不正确或其它数据(恶意攻击)时会一直阻塞到下一个请求,导到服务器性能严重下降,客户端无法收到数据一直等待的情况,因此在初始化处理线程的soap 成功后,应该立即设置处理线程soap 的超时时间,单位为秒: soap_thr[i] = soap_copy(&soap);//在这一行示例代码后一加下面三行代码 soap_thr[i] ->send_timeout = 1; soap_thr[i] ->recv_timeout = 1;

soap_set_mode(soap_thr[i], SOAP_C_UTFSTRING); /*设置采用UTF-8字符编码*/ 例如下列的一个请求就会导致soap_serve阻塞(ns2:login节点没有闭合) 因为mod_gsoap附加到web服务器的方式问题比较多,iis比较复杂, apache只支持C开发模式,所以gsoap做为一个单独的服务运行,通过代理调用服务.iis可用其它插件或自己编写一个代理类,apache直接修改httpd.conf配置代理. gsoap内存管理 尽量采用soap_malloc(用法和malloc一样)方法分析内存, soap_malloc无需释放内存,在gsoap内部采用链表的方式管理分配的内存,在执行 soap_destroy(tsoap); soap_end(tsoap)后会自动回收内存. 自动回收内存的前提是保证你自己编写的方法能正确运行完成,否则还是会导致内存泄露. gsoap输出 为提升服务性能,减少数据传输量,所有输出都采用字符方式的xml(UTF-8), 不要采用结构或对象输出(输入可以),采用结构或对象输出优点是在客户端无需解析,自动生成相关对象和结构,但是会导致服务性能下降和传输的数量增大.例如: int ns2__login(xsd__string username,xsd__string password,xsd__string &rsp); rsp为字符串格式的xml,在客户端需要解析后方可使用.服务器应答只有三种输出格式,所有节点名称都大写,所有属性名称都小写,节点之间无换行,客户端按下面的三种规则编写解析器即可. 第一种为服务器异常消息

Webservice 发布--WSDL,SOAP

本周主要学习了Web service,Web service就是一个个应用程序,它向外界暴露了一个能够通过Web进行调用的API。 首先应该先了解下Webservice用到的技术:WSDL,SOAP。 WSDL(Web Services Description Language)网络服务描述语言。使用XML编写。两台机器进行通信,服务端写了一个java程序而客户端通过远程访问要调用这个java程序,客户端需要了解这个程序的作用以及所调用的方法参数等。这里我们就需要用WSDL 对此java程序进行描述,客户端获取到此描述文件后对文件进行解析,了解此文件的信息,以及调用方式。 SOAP就是一种访问协议,用于规定应用程序之间通信的格式,独立于平台和语言。根据需要生成SOAP请求信息,发到服务端。服务端接收后分析其中的方法和参数调用指定的方法完成此请求,并把返回值放入SOAP回应消息返回给客户。 例:先创建一个名为Web的Web工程在建一个名为com.cxf.web的包,在包下创建两个java文件实现两个数相加的功能: 1. add.java package com.cxf.web; import javax.jws.WebService; @WebService public interface add { public int jia(int a,int b); } 2. addImp.java、 package com.cxf.web; import javax.jws.WebService; @WebService(endpointInterface="com.cxf.web.add") public class addImp implements add{ public int jia(int c,int d){ return (c+d); } } 相关的配置

BigAnt4.0 WebService接口规范文档

BigAnt4.0 WebService接口规范文档 系统名称BigAnt4.0Websrvce服务接口 版本V1.6 项目负责人 作者张维忠 文档提交日期2014-10-15 杭州艾朴软件有限公司 (版权所有,翻版必究)

修改记录 No 修改后 版本号 修改内容简介修改日期修改人 1 V1.1 增加了群组接口:6.4. 2 – 6.4.7;2014.12.10 张维忠 2 V1.1 用户增加了接口:6.1.7 2014.12.1 3 张维忠 3 V1.2 1、消息增加了接口:6.3.3 – 6.3.6; 2、修改了接口调用端口:6669改为8000 2014.12.17 张维忠 4 V1.3 增加了用户禁用启用的接口:6.1.8 2014.12.29 张维忠 5 V1.4 增加了移除部门成员的接口:6.2. 6 2015.01.15 张维忠 6 V1.5 增加了BigAnt插件说明:第7章2015.01.2 7 张维忠 7 V1.6 增加了BigAnt外部启动说明:第8章2015.01.27 张维忠

目录 1背景 (5) 2规范适用对象说明 (5) 3接口配置 (5) 4响应输出格式规范 (5) 4.1XML输出格式 (5) 4.2json输出格式 (6) 5返回码定义 (6) 6API接口细则 (7) 6.1用户接口 (7) 6.1.1用户新增 userAdd (7) 6.1.2用户删除 userDelete (8) 6.1.3用户更新 userUpdate (9) 6.1.4用户信息查询 userInfo (10) 6.1.5用户身份验证 userValid (11) 6.1.6设置用户密码 setPassword (11) 6.1.7列出用户(支持分页) listUser (12) 6.1.8禁用启用帐号 disableUser (13) 6.2部门接口 (14) 6.2.1部门新增 deptAdd (14) 6.2.2部门删除 deptDelete (15) 6.2.3部门更新 deptUpdate (16) 6.2.4部门信息查询 deptInfo (16) 6.2.5设置部门成员 deptSetMember (17) 6.2.6移除部门成员 deptRemoveMember (18) 6.3消息接口 (19) 6.3.1发送消息 sendMessage (19) 6.3.2发送公告 sendBoard (20) 6.3.3向群组成员群发消息 sendMessageByGroup (20) 6.3.4向部门成员群发消息 sendMessageByPath (21) 6.3.5列出消息记录(支持分页) msgList (22) 6.3.6查询消息内容 getMsgContent (23) 6.4群组接口 (24) 6.4.1群组新增 groupAdd (24) 6.4.2群组删除 groupDelete (25) 6.4.3群组修改 groupUpdate (25) 6.4.4群组信息查询 groupInfo (26) 6.4.5群组踢出成员groupKickMember (27) 6.4.6获取群组成员groupListMember (27) 6.4.7群组设置成员groupSetMember (28) 6.5角色接口 (29) 6.5.1角色新增 roleAdd (29)

ESB部署WebService接口(统一用户和待办)

1 统一待办(WebService方式) 1.1 概述 门户系统做为用户访问各集成应用系统的统一入口,用户访问企业内部信息资源时只需要登录到门户系统,就可使用门户系统集成的各个应用,而待办做为各系统中用户需要处理的工作,门户系统需要提供收集建投内部应用系统中产生的待办信息,并且进行统一展现的功能,即统一待办功能。 统一待办应用业务涉及到的系统其中包括本期门户系统建设过程中所需集成的OA、WCM、EAM系统。 为保证门户系统接入各应用系统待办信息的规范性,现就各应用系统接入实现做统一要求,以确保门户系统统一待办功能实现的规范性、重用性及安全性。不满足本技术方案提供的接入规则的相关应用系统,应参考本文档完成对应用系统改造后方可进行门户系统统一待办接入工作。 统一待办实现共分为以下部分: 系统待办信息获取 系统待办信息展示 系统待办信息处理 1.2 待办信息获取 设计思路:应用系统通过门户系统提供的webservice接口向门户系统统一待办系统库写入代表信息,如下图

数据获取设计示意图 步骤如下: 1.应用系统需获得最新的待办信息。 2.应用系统通过门户接口,将获得的最新待办信息发送到门户系统。 3.统一待办系统将应用系统提供的待办信息展示给用户。 4.应用系统通过调用集成接口后获得信息,可以判断发送信息操作是否正常。 1.3 待办信息展示 设计思路:应用系统将最新的待办信息发送到统一待办系统中,并最终展示到门户首页上的待办栏目上,如下图 用户 待办栏目页面 待办集中展示设计示意图 场景如下:

在所有的待办类标题前加上”请办理”,待阅类标题前加上”请审阅”。此外,如果信息是未办或者未阅,用红色表示 1.4 待办信息处理 设计思路:用户点击门户系统上“待办栏目”里的一条待办时,弹出一个新页面,首先同应用系统实现SSO,然后跳转到应用系统的待办页面,完成待办处理后,由应用系统调用门户接口通知门户系统,并关闭弹出的待办处理页面,门户系统负责即时刷新门户待办页。如下图: 待办信息集中处理设计示意图

linux下gsoap使用及移植

Linux下gsoap的使用及移植 1、下载gsoap 在gsoap的官网中可以找到最新的gsoap安装包及相关文档 gsoap官网:https://www.360docs.net/doc/af18695229.html,/~engelen/soap.html 下载地址:https://www.360docs.net/doc/af18695229.html,/projects/gsoap2/files/ 2、安装gsoap a、解压zip压缩包 命令:unzip gsoap_2.8.1.zip b、进入解压后生成的文件夹gsoap-2.8 命令:cd gsoap-2.8/ c、切换到root用户 命令:su 输入密码 d、配置编译环境 在gsoap-2.8/文件夹下执行configure文件,自动配置编译环境 命令:./configure e、编译连接 命令:make f、安装gsoap 命令:make install 安装完毕可用wsdl2h或soapcpp2查看gsoap是否已经安装成功 看到上述两个命令的返回说明安装成功 3、应用实例 wsdl2h -o outfile.h infile.wsdl 实现wsdl文件到h文件的数据映射 soapcpp2 -c outfile.h生成相应的底层通信stub,strech程序 首先新建一个文件夹名为gsoap;然后 (1)不使用wsdl2h a、不使用wsdl2h我们可以直接从.h文件来生成代码。我们先定义一个函数声明文 件,用来定义接口函数,名称为add.h,内容如下: //gsoapopt cw //gsoap ns2 schema namespace: urn:add //gsoap ns2 schema form: unqualified //gsoap ns2 service name: add //gsoap ns2 service type: addPortType //gsoap ns2 service port:https://www.360docs.net/doc/af18695229.html,/~engelen/addserver.cgi //gsoap ns2 service namespace: urn:add //gsoap ns2 service transport: https://www.360docs.net/doc/af18695229.html,/soap/http //gsoap ns2 service method-style: add rpc //gsoap ns2 service method-encoding: add https://www.360docs.net/doc/af18695229.html,/soap/encoding/ //gsoap ns2 service method-action: add "" int ns2__add( int num1, int num2, int* sum ); b、执行soapcpp2 –c add.h,自动生成一些远程调用需要的文件 c、接下来写一个服务端,创建文件addserver.c

WebService接口代码样例说明

WS接口代码样例 Java代码调用样例 参见WSTest_for_Java.rar附件,该附件为Eclipse工程代码。接口调用参见https://www.360docs.net/doc/af18695229.html,info.smsmonitor.Test C代码调用样例 参见WSTest_for_c.tar附件,该附件为标准C工程代码。 附录 Webservice消息发送接口报文样例: TaskID-003761653 8613301261178 106557503 1 This is test message 1 00:00-23:59

通过CXF开发webService接口(soap协议、maven项目)

1. 引入cxf的jar包 pom文件里面直接增加依赖 < dependency> junit junit 4.11 test org.springframework spring- webmvc 4.0.0.RELEASE org.apache.cxf apache-cxf 2.4.3 pom 2. 配置web.xml文件 < web-app xmlns= "https://www.360docs.net/doc/af18695229.html,/xml/ns/javaee" xmlns:xsi= "https://www.360docs.net/doc/af18695229.html,/2001/XMLSchema-instance" xsi:schemaLocation= "https://www.360docs.net/doc/af18695229.html,/xml/ns/javaee https://www.360docs.net/doc/af18695229.html,/xml/ns/javaee/web-app_3_1.xsd" version= "3.1" > < display-name >Archetype Created Web Application < context-param > contextConfigLocation classpath:config/spring/metadata WebService-spring.xml org.springframework.web.conte xt.ContextLoaderListener

C++调用Webservice方法

### 先看上面的地址链接,方法和用法基本正确; ### 编译器VS2008,MFC例子进行调用,生成的文件:MLGB.h, soapC.cpp, soapH.h, sopaStub.h, soapWebServiceSoap11BindingProxy.cpp, soapWebServiceSoap11BindingProxy.h, WebserviceSoap11Binding.nsmap ### wsdl2h -s -o MLGB.h -t mytpemap.dat XXXXXXXXXXXXX (typemap.dat在\gsoap-2.8\gsoap\bin\win32目录下没有,把gsoap目录下的typemap.dat的文件复制到相应文件,并在最后添加上xsd__string = | std::wstring | wchar_t*即可) ### soapcpp2 -i -C MLGB.h (找不到文件错误,尝试……import……什么的,添加路径的方法是在命令的最后添加,例如:spoap -i -C MLGB.h -I C:\gsoap-2.8\gsoap\import,这样这一步就可以生成相应的代码) ### \gsoap-2.8\gsoap\bin\win32目录下没有生成soapClient.cpp, 另外要在\gsoap-2.8\gsoap\目录下把stdsoap2.h, stdsoap.cpp也拷贝到相应的程序目录,同时添加按上述链接文档中添加头文件 ### 方法的调用,参数传递的形式是XML格式: 1.soap连接貌似是tcp短连接,方法调用完,对象貌似就得重新new一下(我用的时候遇到的是这种情况,之前写个小例子,用的全局变量,但是没有重新new也没问题,这个没有确认) 2.在soapWebServiceSoap11BindingProxy.h中对应的类WebServiceSoap11BindingProxy 3.webservice的url地址_strUrl=XXXXXXXXXXXXXXX 例如:setStopTiralInfo的方法,其实两个都一样,调用第二个,前两个参数传递NULL /// Web service operation 'setStopTrialInfo' (returns error code or SOAP_OK) virtual int setStopTrialInfo(_ns1__setStopTrialInfo *ns1__setStopTrialInfo, _ns1__setStopTrialInfoResponse &ns1__setStopTrialInfoResponse) { return this->setStopTrialInfo(NULL, NULL, ns1__setStopTrialInfo, ns1__setStopTrialInfoResponse); } virtual int setStopTrialInfo(const char*endpoint, const char*soap_action, _ns1__setStopTrialInfo*ns1__setStopTrialInfo, _ns1__setStopTrialInfoResponse &ns1__setStopTrialInfoResponse); 创建对象:WebServiceSoap11BindingProxy _webClient(_strUrl); 对应参数:_ns1__setStopTrialInfo _input; _ns1__setStopTrialInfoResponse _return; 对_input初始化:_input.soap = &_webClient; _input.soap_default(_input.soap);

常用的webservice接口

商业和贸易: 1、股票行情数据WEB 服务(支持香港、深圳、上海基金、债券和股票;支持多股票同时查询) Endpoint:https://www.360docs.net/doc/af18695229.html,/WebServices/StockInfoWS.asmx Disco:https://www.360docs.net/doc/af18695229.html,/WebServices/StockInfoWS.asmx?disco WSDL:https://www.360docs.net/doc/af18695229.html,/WebServices/StockInfoWS.asmx?wsdl 支持香港股票、深圳、上海封闭式基金、债券和股票;支持多股票同时查询。数据即时更新。此中国股票行情数据WEB 服务仅作为用户获取信息之目的,并不构成投资建议。支持使用| 符号分割的多股票查询。 2、中国开放式基金数据WEB 服务 Endpoint:https://www.360docs.net/doc/af18695229.html,/WebServices/ChinaOpenFundWS.asmx Disco:https://www.360docs.net/doc/af18695229.html,/WebServices/ChinaOpenFundWS.asmx?disco WSDL:https://www.360docs.net/doc/af18695229.html,/WebServices/ChinaOpenFundWS.asmx?wsdl 中国开放式基金数据WEB 服务,数据每天15:30以后及时更新。输出数据包括:证券代码、证券简称、单位净值、累计单位净值、前单位净值、净值涨跌额、净值增长率(%)、净值日期。只有商业用户可获得此中国开放式基金数据Web Services的全部功能,若有需要测试、开发和使用请QQ:8698053 或联系我们 3、中国股票行情分时走势预览缩略图WEB 服务 Endpoint: https://www.360docs.net/doc/af18695229.html,/webservices/ChinaStockSmallImageWS.asmx Disco: https://www.360docs.net/doc/af18695229.html,/webservices/ChinaStockSmallImageWS.asmx?disco WSDL: https://www.360docs.net/doc/af18695229.html,/webservices/ChinaStockSmallImageWS.asmx?wsdl 中国股票行情分时走势预览缩略图WEB 服务(支持深圳和上海股市的全部基金、债券和股票),数据即时更新。返回数据:2种大小可选择的股票GIF分时走势预览缩略图字节数组和直接输出该预览缩略图。 4、外汇-人民币即时报价WEB 服务 Endpoint: https://www.360docs.net/doc/af18695229.html,/WebServices/ForexRmbRateWebService.asmx Disco:https://www.360docs.net/doc/af18695229.html,/WebServices/ForexRmbRateWebService.asmx?disco

相关文档
最新文档