全部科目 > 系统架构设计师 >
2024年上半年 上午试卷 综合知识
第 49 题
知识点 Web服务协议堆栈     
关键词 协议栈   协议  
章/节 软件架构基础知识  
 
 
UDDI是一种用于()Web Service的技术,它是Web Service协议的一个重要部分。
 
  A.  描述、发现、集成
 
  B.  描述、发现、开发
 
  C.  描述、利用、开发
 
  D.  描述、连接、集成




 
 
相关试题     软件架构基础知识 

  第55题    2021年下半年  
在架构评估中,(55)是一个或多个构件(和或构件之间的关系的特性。改变加密级别的设计决策属于(56),因为它可能会对安全性和性能产生非常重要的影响。

  第63题    2019年下半年  
某公司欲开发一个电子交易清算系统,在架构设计阶段,公司的架构师识别出3个核心质量属性场景。其中“数据传递时延不大于1s,并提供相应的优先级管理”主要与..

  第47题    2019年下半年  
对软件体系结构风格的研宄和实践促进了对设计的复用。Garlan和Shaw对经典体系结构风格进行了分类。其中,   (46)   属于数据流体系结..

 
知识点讲解
· Web服务协议堆栈
· 栈
 
        Web服务协议堆栈
        2004年2月11日,W3C提出了最新的Web Service协议栈,其内容如下图所示。
        
        Web服务协议栈
        Web服务协议堆栈的下层为网络通信部分,Web服务继承了Web的访问方式,使用HTTP(S)作为网络传输的基础,除此之外Web服务还采用了其他的传输协议,如SMTP、FTP、JMS、HOP等。在消息处理方面,Web服务使用了SOAP(Simple Object Access Protocol,简单对象访问协议)作为消息的传送标准。在此之上是WSDL,用以描述Web服务的访问方法。位于最顶层的是与Web服务和应用程序以及Web服务之间相互集成相关的协议,其中包含发现、集成等若干方面。除了底层的传输协议外,整个Web服务协议栈是以XML为基础的,XML语义的精确性和灵活性赋予了Web服务强大的功能。除这些基本协议外,还有一些需要讨论的问题,那就是安全和管理,这两大问题不是Web服务可以独立解决的,例如,在安全方面就需要与PKI(Public Key Infrastructure,公共密钥基础设施)、LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)等相结合。
        (1)SOAP。SOAP是一种基于XML的协议,通过SOAP,应用程序可以在网络中进行数据交换和远程调用。SOAP使用XML进行编码,是一个开放式的协议。SOAP本身并没有定义信息的语义、服务质量、事务处理等问题,它仅仅是一个对象通信协议,与应用平台完全无关。我们可以将SOAP理解为:HTTP+XML+RPC(Remote Procedure Call,远程过程调用)。在这里,HTTP是网络中的通信协议;XML是数据格式的协议;虽然将SOAP理解为RPC的一种并不准确,因为SOAP并非单纯的远程过程调用,SOAP要强大得多。但以RPC的观点看待SOAP,有助于理解SOAP。由于SOAP采用XML和HTTP封装通信消息,所以SOAP需要增加XML解析和HTTP传输的额外开销。
        (2)WSDL。WSDL包含了一套基于XML的语法,将Web服务描述为能够进行消息交换的服务访问点的集合,从而满足了这种需求。WSDL定义了可被机器识别的SDK(Software Development Kit,软件开发工具包)文档,同时,WSDL也可用于描述自动执行应用程序在通信中所涉及的细节问题。WSDL的目标是描述如何使用程序来调用Web服务,所以我们可以把WSDL理解为Web服务的SDK标准,或者是Web服务的接口定义。对于服务提供者来说,既需要描述它们提供的Web服务是做什么的,还要描述如何使用他们提供的Web服务。
        (3)UDDI(Universal Description Discovery and Integration,统一描述、发现和集成)。UDDI提供了一种Web服务的发布、查找和定位方法。我们可以将UDDI理解为一种目录服务,Web服务提供者使用UDDI将服务发布到服务注册中心,而Web服务使用者通过UDDI查找并定位服务。UDDI除了目录服务之外,还定义了一个用XML表示的服务描述标准。UDDI定义了一种Web服务的发布方式。UDDI商业注册中心可以为程序或程序员提供Web服务的位置和技术信息。服务提供者可以向专用的UDDI结点发布服务的描述信息,而服务的使用者可以动态的查询并连接到特定的Web服务。
 
        栈
               栈的定义
               栈是只能在表的一端进行插入、删除的线性表。栈中允许插入、删除的一端称为栈顶,相反,栈中不允许插入、删除的一端称为栈底。处于栈顶位置的数据元素称为栈顶元素,不含任何数据元素的栈称为空栈。栈的特点为后进先出(Last In First Out, LIFO)。
               下图是一个栈的示意图,通常用指针top指示栈顶的位置,用指针bottom指向桟底。栈顶指针top动态反映栈的当前位置。
               
               栈的出入示意图
               栈的基本操作
               栈的基本操作主要有以下6种。
               .InitStack(&S):初始化操作,构造一个空栈S。
               .StackEmpty(S):若栈S为空栈,返回1,否则返回0。
               .Push(&S, e):插入元素e为新的栈顶元素。
               .Pop(&S,&e):删除S的栈顶元素,并用e返回其值。
               .GetTop(S,&e):用e返回S的栈顶元素。
               .ClearStack(&S):将S清为空栈。
               栈的顺序存储结构
               栈的顺序存储用向量作为栈的存储结构,向量S表示栈,m表示栈的大小,用指针top指向栈顶位置,S[top]表示栈顶元素,当在栈中进行插入、删除操作时,都要移动栈指针;而当top=m-1时,则栈满,当top=-1时,表示栈空。同时为了避免浪费空间可以采用双栈机制,即向量的两端为栈底。
               栈的顺序存储结构的C语言描述如下:
               
               栈的说明如下。
               .由于C语言的数组下标的范围从0至StackSize-1,初始化设置sq.top=-1。
               .栈空条件为sq.top=-1,栈满条件为sq.top=StackSize-1。
               .栈顶元素为sq.data[sq.top]。
               .元素压栈的规则为:在栈不满时,先改变栈顶指针(top=top+1),再压栈。出栈时,在桟非空时,先取栈顶元素的值,再修改栈顶指针(top=top-1)。
               .栈中元素的个数为当前栈顶指针加1。
               在顺序栈上实现基本操作的有关函数如下。
               1)初始化InitStack(SqStack *S)
               
               2)判空StackEmpty(SqStack S)
               
               3)压栈Push(SqStack *S, ElemType e)
               
               4)出栈Pop(SqStack *S, ElemType *e)
               
               5)取栈顶GetTop(SqStack *S, ElemType*e)
               
               6)清栈ClearStack(SqStack *S)
               
               栈的链式存储结构
               栈的链式存储也叫链栈,我们把插入和删除均在链表表头进行的链表称为链栈。链栈也分有头节点和无头节点两种。带头节点的链栈操作比较方便。
               链栈的节点类型定义如下:
               
               链栈的约定与说明如下。
               .栈以链表的形式出现,链表(不带头节点)首指针为S,即栈顶为S,链表尾节点为栈底。
               .初始化时,S=NULL(不带头节点);S=(LStack *),malloc(sizeof(LStack)),S→next=NULL(带头节点)。
               .栈顶指针的引用为S(不带头节点)或S→next(带头节点),栈顶元素的引用为S→data(不带头节点)或S→next→data(带头节点)。
               .栈空条件为S==NULL(不带头节点)或S→next=NULL(带头节点)。
               .进栈操作和出栈操作与单链表在开始节点的插入和删除操作一致。
               对不带头节点的链栈,其基本操作函数如下。
               1)初始化initstack(LStack *S)
               
               2)压栈(入栈)push(LStack *S, ElemType x)
               
               3)退栈(出栈)pop(LStack *S, ElemType *x)
               
               4)读栈顶元素gettop(LStack *S, ElemType *x)
               
               5)判栈空isempty(LStack *S)
               
               栈的应用
               栈具有广泛的应用,例如,求表达式的值及递归到非递归等。
               1)表达式求值
               在源程序编译中,若要把一个含有表达式的赋值语句翻译成正确求值的机器语言,首先应正确地解释表达式。例如,对赋值语句X=4+8×2-3;,其正确的计算结果应该是17,但若在编译程序中简单地按自左向右扫描的原则进行计算,则为:X=12×2-3=24-3=21。这个结果显然是错误的。因此,为了使编译程序能够正确地求值,必须事先规定求值的顺序和规则。通常采用运算符优先法。
               2)递归到非递归
               将一个递归算法转换为功能等价的非递归算法有很多方法,可以使用栈保存中间结果。其一般形式如下:
               
               例如,求n!的递归函数如下:
               
               使用转换成等价的非递归算法如下:
               
               其中,st[top][0]用于存放n值,st[top][1]用于存放n!值,在初始时,设置st[top][1]为0,表不n!尚未求出。



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2026 All Rights Reserved
软考在线版权所有