soap主要包括哪四大内容,简述SOAP的主要内容

http://www.itjxue.com  2023-01-20 02:19  来源:未知  点击次数: 

soap有哪些常用的协议和规范

SOAP协议规范

1. 简介

SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语义,如编程

模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制。这使SOAP能够被

用于从消息传递到RPC的各种系统。

SOAP包括三个部分

SOAP封装(见第4节)结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。

SOAP编码规则(见第5节)定义了用以交换应用程序定义的数据类型的实例的一系列机制。

SOAP RPC表示(见第7节)定义了一个用来表示远程过程调用和应答的协定。

虽然这三个部分都作为SOAP的一部分一起描述,但它们在功能上是相交的。特别的,封装和编码规则是在不同的名域中定义的,这种模块性的定义方法增

加了简单性。在SOAP封装,SOAP编码规则和SOAPRPC协定之外,这个规范还定义了两个协议的绑定,描述了在有或没有HTTP扩展框架[6]的情

况下,SOAP消息如何包含在HTTP消息[5]中被传送。

1.1 设计目标

SOAP的主要设计目标是简单性和可扩展性,这意味着传统的消息系统和分布对象系统的某些性质不是SOAP规范的一部分。这些性质包括:

分布式碎片收集

成批传送消息

对象引用(要求分布式碎片收集)

激活机制(要求对象引用)

1.2 符号约定

这篇文章中的关键字 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL

NOT","SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",

和"OPTIONAL"的解释在RFC-2119 [2]中。 这篇文章中用到的名域前缀 "SOAP-ENV"

和"SOAP-ENC"分别与""

和""关联。整篇文档中,名域前缀“xsi”被假定为与

URI"“(在XMLSchema规范[11]定义)相连。类似

的,名域前缀”xsd“被假定为与URI""(在[10]中定义)相连。名域前

缀”tns“用来表示任意名域。所有其它的名域前缀都只是例子。

名域URI的基本形式”some-URI“表示某些依赖于应用程序或上下文的URI[4]。这个规范用扩展BNF(在RFC-2616[5] 描述)描述某些结构。

1.3 SOAP消息举例

在这个例子中,GetLastTradePrice SOAP

请求被发往StockQuote服务。这个请求携带一个字符串参数和ticker符号,在SOAP应答中返回一个浮点数。XML名域用来区分SOAP标志

符和应用程序特定的标志符。这个例子说明了在第6节中定义的HTTP绑定。如果SOAP中管理XML负载的规则完全独立于HTTP是没有意义的,因为事实

上该负载是由HTTP携带的。在Appendix A中有更多的例子。

例1 在HTTP请求中嵌入SOAP消息

POST /StockQuote HTTP/1.1

Host:

Content-Type: text/xml;

charset="utf-8"

Content-Length: nnnn

SOAPAction:

"Some-URI"

SOAP-ENV:Envelope

xmlns:SOAP-ENV=""

SOAP-ENV:encodingStyle=""

SOAP-ENV:Body

m:GetLastTradePrice xmlns:m="Some-URI"

symbolDIS/symbol

/m:GetLastTradePrice

/SOAP-ENV:Body

/SOAP-ENV:Envelope

下面是一条应答消息,包括HTTP消息,SOAP消息是其具体内容 :

例2 在HTTP应答中嵌入SOAP消息

HTTP/1.1 200 OK

Content-Type: text/xml;

charset="utf-8"

Content-Length:

nnnn

SOAP-ENV:Envelope

xmlns:SOAP-ENV=""

SOAP-ENV:encodingStyle=""/

SOAP-ENV:Body

m:GetLastTradePriceResponse xmlns:m="Some-URI"

Price34.5/Price

/m:GetLastTradePriceResponse

/SOAP-ENV:Body

/SOAP-ENV:Envelope

. SOAP消息交换模型

SOAP消息从发送方到接收方是单向传送,但正如上面显示的,SOAP消息经常以请求/应答的方式实现。SOAP实现可以通过开发特定网络系统的特

性来优化。例如,HTTP绑定(见第6节)使SOAP应答消息以HTTP应答的方式传输,并使用同一个连接返回请求。不管SOAP被绑定到哪个协

议,SOAP消息采用所谓的”消息路径“发送,这使在终节点之外的中间节点可以处理消息。一个接收SOAP消息的SOAP应用程序必须按顺序执行以下的动

作来处理消息:识别应用程序想要的SOAP消息的所有部分

(见4.2.2节)检验应用程序是否支持第一步中识别的消息中所有必需部分并处理它。如果不支持,则丢弃消息(见4.4节)。在不影响处理结果的情况下,

处理器可能忽略第一步中识别出的可选部分。如果这个SOAP应用程序不是这个消息的最终目的地,则在转发消息之前删除第一步中识别出来的所有部分。为了正

确处理一条消息或者消息的一部分,SOAP处理器需要理解:所用的交换方式(单向,请求/应答,多路发送等等),这种方式下接收者的任务,RPC机制(如

果有的话)的使用(如第7节中所述),数据的表现方法或编码,还有其它必需的语义。尽管属性(比如SOAP

encodingstyle,见4.1.1节)可以用于描述一个消息的某些方面,但这个规范并不

强制所有的接收方也必须有同样的属性并取同样的属性值。举个例子,某一特定的应用可能知道一个元素表示一条遵循第7节约定的RPC请求,但是另外一些应用

可能认为指向该元素的所有消息都用单向传输,而不是类似第7节的请求应答模式。

(译者注:交互双方的SOAP消息并不一定要遵循同样的格式设定,而只需要以一种双方可理解的格式交换信息就可以了)

3. 与XML的关系

所有的SOAP消息都使用XML形式编码(更多有关XML的信息请见[7])一个SOAP应用程序产生的消息中,所有由SOAP定义的元素和属性中

必须包括正确的名域。SOAP应用程序必须能够处理它接收到的消息中的SOAP名域(见4.4节),并且它可以处理没有SOAP名域的SOAP消息,就象

它们有正确的名域一样。SOAP定义了两个名域(更多有关XML名域的信息请见[8])

SOAP封装的名域标志符是""

SOAP的编码规则的名域标志符是""

SOAP消息中不能包含文档类型声明,也不能包括消息处理指令。[7]

SOAP使用"ID"类型"id"属性来指定一个元素的唯一的标志符,同时该属性是局部的和无需校验的。SOAP使用"uri-reference"类型

的"href"属性指定对这个值的引用,同时该属性是局部的和无需校验的。这样就遵从了XML规范[7],XMLSchema规范[11]和XML连接语

言规范[9]的风格。除了SOAP mustUnderstand

属性(见4.2.3节)和SOAPactor属性(见4.2.2节)之外,一般允许属性和它们的值出现在XML文档实例或Schema中(两者效果相

同)。也就是说,在DTD或Schema中声明一个缺省值或固定值和在XML文档实例中设置它的值在语义上相同。

4. SOAP封装

SOAP消息是一个XML文档,包括一个必需的SOAP封装,一个可选的SOAP头和一个必需的SOAP体。在这篇规范剩余部分中,提到SOAP消息时就是指这个XML文档。这一节中定义的元素和属性的名域标志符为:

""

。一个SOAP消息包括以下部分:1.在表示这个消息的XML文档中,封装是顶层元素。2.应用SOAP交换信息的各方是分散的且没有预先协定,SOAP

头提供了向SOAP消息中添加关于这条SOAP消息的某些要素(feature)的机制。SOAP定义了少量的属性用来表明这项要素(feature)是

否可选以及由谁来处理。(见4.2节)3.SOAP体是包含消息的最终接收者想要的信息的容器(见4.3节)。SOAP为SOAP体定义了一个Fault

元素用来报告错误信息。语法规则如下所示:

封装

元素名是 "Envelope"

在SOAP消息中必须出现。

可以包含名域声明和附加属性。如果包含附加属性,这些属性必须限定名域。类似的,"Envelope"可以包含附加子元素,这些也必须限定名域且跟在SOAP体元素之后。

SOAP头 (见4.2节)

元素名是"Header"

在SOAP消息中可能出现。如果出现的话,必须是SOAP封装元素的第一个直接子元素。

SOAP头可以包含多个条目,每个都是SOAP头元素的直接子元素。所有SOAP头的直接子元素都必须限定名域。

SOAP体 (见4.3节)

元素名是"Body"

在SOAP消息中必须出现且必须是SOAP封装元素的直接子元素。它必须直接跟在SOAP头元素(如果有)之后。否则它必须是SOAP封装元素的第一个直接子元素。

SOAP体可以包括多个条目,每个条目必须是SOAP体元素的直接子元素。SOAP体元素的直接子元素可以限定名域。SOAP定义了SOAPFault元素来表示错误信息。

4.1.1 SOAP encodingStyle属性

EncodingStyle全局属性用来表示SOAP消息的序列化规则。这个属性可以在任何元素中出现,作用范围与名域声明的作用范围很相似,为这

个元素的内容和它的所有没有重载此属性的子元素。SOAP消息没有定义缺省编码。属性值是一个或多个URI的顺序列表,每个URI确定了一种或多种序列化

规则,用来不同程度反序列化SOAP消息,举例如下:

""

" "

""

第5节中定义的序列化规则由URI""

确定。使用这个特定序列化规则的消息应该用encodingStyle属性说明这一点。另外,所有

以""开头的URI中的序列化规则与第5节中定义的SOAP编码规

则相一致。一个零长度的URI("")明确显示所含元素没有任何编码形式。这可以用来取消上一级元素的所有编码声明。

4.1.2 封装版本模型

SOAP没有定义常规的基于主版本号和辅版本号的版本形式。SOAP消息必须有一个封装元素与名

域""关联。如果SOAP应用程序接收到的SOAP消息中的

SOAP封装元素与其他的名域关联,则视为版本错误,应用程序必须丢弃这个消息。如果消息是通过HTTP之类的请求/应答协议收到的,应用程序必须回答一

个SOAP VersionMismatch 错误信息(见4.4节)。

4.2 SOAP头

SOAP为相互通信的团体之间提供了一种很灵活的机制:在无须预先协定的情况下,以分散但标准的方式扩展消息。可以在SOAP头中添加条目实现这种

扩展,典型的例子有认证,事务管理,支付等等。头元素编码为SOAP封装元素的第一个直接子元素。头元素的所有直接子元素称作条目。条目的编码规则如下:

一个条目有它的完整的元素名(包括名域URI和局部名)确定。SOAP头的直接子元素必须有名域限制。

SOAP encodingStyle属性可以用来指示条目所用的编码形式(见4.1.1节)

SOAP mustUnderstand属性(见4.2.3节)和SOAPactor属性(见4.2.2节)可以用来指示如何处理这个条目以及由谁来处理。(见4.2.1节)

4.2.1 使用头属性

这一节中定义的SOAP头属性确定了SOAP消息的接收者应该怎样按第2节中所述的方式处理消息。产生SOAP消息的SOAP应用程序,应该仅仅在

SOAP头元素的直接子元素中使用这些SOAP头属性。SOAP消息的接收者必须忽略所有不在SOAP头元素的直接子元素中SOAP头属性。下面的例子是

一个SOAP头,包括一个元素标志符"Transaction","mustUnderstand"取值为"1"和数值5。这应该以如下方式编码:

SOAP-ENV:Header

t:Transaction

xmlns:t="some-URI" SOAP-ENV:mustUnderstand="1"

5

/t:Transaction

/SOAP-ENV:Header

4.2.2 SOAP actor属性

一个SOAP消息从始节点到终节点的过程中,可能沿着消息路径经过一系列SOAP中间节点。一个SOAP中间节点是一个可以接收转发SOAP消息的

应用程序。中间节点和终节点由URI区分。可能SOAP消息的终节点并不需要所有部分,而在消息路径上的一个和几个中间节点可能需要这些内容。头元素的接

收者扮演的角色类似于一个过滤器,防止这些只发给本接受者的消息部分扩散到其它节点。即一个头元素的接收者必须不转发这些头元素到SOAP消息路径上的下

一个应用程序。同样的,接收者可能插入一个相似的头元素。SOAP actor全局属性可以用于指示头元素的接收者。SOAP

actor属性的值是一个URI。

URI

""指出了第一个处理这个消息的SOAP应用程序需要这个头元

素。这类似于HTTP头中用Connection域表示hop-by-hop范围模型。省略SOAP

actor属性表示接收者是SOAP消息的终节点。如果这个属性要生效,它必须出现在SOAP消息实例中。(见第3节和4.2.1节)

4.2.3 SOAP mustUnderstand属性

SOAP mustUnderstand全局属性用来指示接受者在处理消息时这个条目是否必须处理。条目的接收者由SOAP

actor属性定义(见4.2.2节)。MustUnderstand属性的值是"1" 或 "0"。缺少SOAP

mustUnderstand属性在语义上等同于它的值为"0"。如果一个头元素的SOAP

mustUnderstand属性的值是"1",那么条目的接受者必须或者遵守语义(如以元素的全名传送)并按照语义正确的处理,或者放弃处理消息(见

4.4节)。SOAP mustUnderstand 属性考虑了消息演变的准确性(robust evolution)。必须假定包含SOAP

mustUnderstand属性且值为"1"的元素以某种方式修改了它们的父元素或同层元素的语义。以这种方式连接元素确保了语义上的变化不会被那些不

能完全理解它的接收者忽略。如果这个属性要生效,它必须出现在SOAP消息实例中。(见第3节和4.2.1节)

4.3 SOAP体

SOAP体元素提供了一个简单的机制,使消息的最终接收者能交换必要的信息。使用体元素的典型情况包括配置RPC请求和错误报告。体元素编码为

SOAP封装元素的直接子元素。如果已经有一个头元素,那么体元素必须紧跟在头元素之后,否则它必须是SOAP封装元素的第一个直接子元素。体元素的所有

直接子元素称作体条目,每个体条目在SOAP体元素中编码为一个独立的元素。条目的编码规则如下:

一个条目由它的元素全名(包括名域URI和局部名)确定。SOAP体元素的直接子元素可能是名域限制的。

SOAP encodingStyle属性可能用来指示条目(见4.1.1节)的编码方式。

SOAP定义了一个Fault条目用来报告错误信息。(见4.4节)

4.3.1 SOAP头和体的关系

虽然头和体定义为独立的元素,它们实际上是有关系的。体条目和头条目的关系如下:体条目在语义上等同于actor属性为缺省值且mustUnderstand属性值为"1"的头条目。不使用actor属性则表示缺省的actor。

简述soap的主要内容有哪些

SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语义,如编程

模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制。

SOAP 的工作原理?

SOAP(简单对象访问协议):SOAP是使用XML通过Internet发送信息和访问动态Web服务的友好界面。其主要作用在于确保信息通过互联网在业务应用之间传输的可靠性。作为一种用在分布式环境中交换结构化数据的协议,它包括三个部分:信封、报头(可选)和协议消息体。信封标记SOAP消息的开始与结束。它还可以规定在网络上数据的编码规则。SOAP报头可以包含发送给一个地址或多个地址的邮件、一个支付代码或有关RPC类型互动的信息。一个信封中可以有多个报头或完全没有报头。SOAP消息体传送自描述结构或RPC类型接口格式的数据。

什么是SOAP?

SOAP(简单对象访问协议)一般指简单对象访问协议(Simple Object Access Protocol)。

简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

SOAP历史:

SOAP是“Simple Object Access Protocol”的缩写。

最新版本SOAP 1.2版在2003年6月24日成为W3C的推荐版本。

SOAP由Dave Winer, Don Box,Bob Atkinson, Mohsen Al-Ghosein于1998年设计,当时只作为一种对象访问协议。SOAP规范由 万维网联盟的 XML工作组维护。

web服务服务中的soap信息包括什么内容

Types:定义了消息交换中使用的数据类型。在 DemoWebServiceService.wsdl 中,您可以导入 DemoWebServiceService_schema1.xsd,而不需要在 WSDL 文件中定义数据类型。

Message: 定义了所交换的消息。您有两个消息,“hello” 和 “helloResponse”。消息 hello 其中有一部分是 “parameters”。这个部分有一个元素 “tns:hello”。而消息 helloResponse 其中有一部分是 “parameters”,刚好与 hello 的一样。这个部分有一个元素 “tns:helloResponse”。这两个元素 hello 和 helloResponse 都定义在 DemoWebServiceService_schema1.xsd 中。您很快会下面看到它的内容。

Port Type:支持终端的操作。一个操作会提供一个输入消息和一个输出消息。您有一个名为 “hello” 的操作,它由一个输入消息 “tns:hello” 和一个输出消息 “tns:helloResponse” 组成。这是一个请求-响应传输。一个 WSDL 为终端提供了 4 种不同的传输基本参数:

one-way

request-response

solicit-response

notification

在 one-way 传输中,一个终端只能接收消息。在 request-response 传输中,一个终端会先接收一个消息然后再发送一个相应的消息。在 solicit-response 传输中,一个终端会先发送一个消息然后再接收一个相应的消息。在 notification 传输中,一个终端只能发送消息。

Binding:定义了由一种端口类型定义的操作和消息的协议细节和消息格式规范。您会为 style 属性提供一个 “document”。这个 style 属性包含 2 种不同类型的消息,rpc 和 document。如果是 rpc,消息会包含了一些参数和返回值。如果是 document ,消息则包含一些文档。transport 属性的值包含了 SOAP 的传输 URI。 表示您将使用 SOAP 规范中的 HTTP 绑定。您要为 soapAction 属性中 SOAP 的 HTTP 绑定的 SOAPAction HTTP 头指定 URI。由于您使用了一个 SOAP 的 HTTP 绑定,因此必须指定 soapAction 属性的值。您可以为 soapAction 属性指定一个空字符串,即 ""。soap:body 元素指定了如何在 SOAP 消息主体元素内聚集消息各部分。而 use 属性则提供了两个不同的选项:literal 和 encoded。如果您使用 literal,这表示您使用一个使用元素或类型属性的具体的模式定义。如果您使用 encoded,那么您使用的是带有编码规则的抽象类型。

Service:定义了一组相关的端口。

Port:通过为一个绑定指定一个网络地址而定义一个通信终端。

SAOP(编程中)是什么意思?有什么作用?

SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encodingrules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPCrepresentation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。

虽然这四个部分都作为SOAP的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的XML命名空间(namespace)中,这样使得定义更加简单。

SOAP的两个主要设计目标是简单性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的某些性质将不是SOAP规范的一部分。比如:分布式垃圾收集(Distributed garbage collection)、成批传送消息(Boxcarring or batching ofmessages)、对象引用 (Objects-by-reference(which requires distributedgarbage collection))、对象激活 (Activation(which requiresobjects-by-reference))。

(责任编辑:IT教学网)

更多

推荐照片处理文章