SOAP基础教程

SOAP消息由Header和Body两部分组成,Header面向底层系统服务,Body面向具体应用。Header中的actor属性定义了处理消息的角色,mustUnderstand属性指明条目是否必须被处理。Body中的Fault元素用于传输错误信息,包括faultcode、faultstring、faultactor和detail等字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SOAP= envelope + encoding rules +RPC representation +binding

其中:编码规则:定义了一个数据的编序机制,从而来定义应用程序中需要使用的数据类型。

      RPC:用于表示远端过程调用和响应的约定。

1.            消息交换模型

一个接收到SOAP消息的SOAP应用程序处理消息的步骤:

l        找到并标识SOAP消息中所有需要该应用程序理解的那部分内容

l        检验SOAP被标识的部分内容,处理所有必须强制处理的内容,若不符合双方的约定,则丢弃

l        若该应用程序不是最终接受者,则删除所有第一步标识的内容,附上处理的结果,并转发

1.1            SOAP 结点

SOAP结点接受并处理一个消息时,将被要求以一个或多个角色来处理,具体是由actor属性决定的,而它的值是个URI,任何一个结点都属于命名空为http://www.w3.org/2001/06//soap-envelope/actor/next的角色。SOAP结点可以使用匿名角色的方式(即省略actor属性)来使自己成为最终SOAP接受者。而SOAP规范本身并没有定义在受到一个指定的消息后,应当如何判断其中信息块应当按照何种角色定义进行何种语义的处理,这些都是应用程序或解决方案自行定义的,也就是说应用程序和服务端绑定后,已经确定了消息传递的路径,并按照与服务端的约定,确定了各个结点的角色。

      除了SOAP协议中预先定义的属性,如mustUnderstand actor 等,一般允许属性及属性值在XML实例或者在XML Schema 文档中描述,也就是说Schema 文档中描述了出现在SOAP 协议中的元素和元素类型,以及元素中的各种属性,例如:

            

2.            SOAP 消息结构

    一个SOAP 消息是由两个部分组成的:Header Bodyheader 是面向底层系统服务的,而SOAP Body 是面向具体应用程序的,同时在SOAP 的处理逻辑上,也是先处理SOAP Header ,然后处理SOAP Body 的。

       当所有的SOAP Header条目的标准处理模块被处理完后,SOAP Body 的处理程序就被启动运行,来处理Body 中的信息块。  

2.1 SOAP Header

        一个生成SOAP 消息的SOAP 应用程序应该仅仅使用SOAP Header 元素信息项的子元素信息项的SOAP Header 属性信息项,Header 元素信息块式由各个Header 条目信息块(Header blocks)组成,而各个中间结点只能处理SOAP Header 条目,也就是Header 是为了面向中间平台的,而不是为了最终应用程序(即最终接受者)而设的。

       Header 元素信息项具备以下几个内容:

l        一个局部名:Header

l        一个命名空间http://www.w3.org/2001/12/soap-envelope

l        零个或多个带有命名空间修饰限定的属性信息项

l        零个或多个带有命名空间修饰限定的元素信息项(所有子元素都被称为 SOAP Header 条目)

每个SOAP Header 条目元素信息项:

l        必须带有命名空间修饰限定

l        各一带有一个encodingStyle 属性信息项

l        可以带有一个actor 属性信息项

l        可以带有一个mustUnderstand 属性信息项

       一个生成SOAP 消息的SOAP 应用程序应该仅仅使用SOAP Header 元素信息项的 SOAP Header 属性信息项。而对于SOAP 接收者而言,除了那些并非作为SOAP Header 元素的直接子元素出现的SOAP Header 条目所携带 SOAP Header 属性信息项外,SOAP 消息的接收者必须忽略在其他地方出现的SOAP Header 属性信息项。

       2.1.1 SOAP actor 属性

       SOAP 消息从生成者到达最终接受者,将潜在地沿着消息路径经过一系列的SOAP 中介结点。而中介结点是一个能够接受和转发SOAP 消息的应用程序。

      Actor 属性信息项具备:

l        一个局部变量名actor

l        一个命名空间:http://www.w3.org/2001/12/soap-envelope

l        如果actor要生效,那必须出现,而不能通过默认值等方式生效

2.1.2   SOAP mustUnderstand 属性

这个属性值用于指明一个SOAP Header 条目是强制的,还是可选的要求接受者处理,即用户是否可以忽略该SOAP Header 条目的存在。

  mustUnderstand 属性信息项具备:

l        一个局部名 mustUnderstand

l        一个命名空间名:http://www.w3.org/2001/12/soap-envelope

l        如果mustUnderstand 要生效,那么它必须出现,而不能通过默认值等方式生效

它的类型是布尔型,可为“0/false”或“1/true”。(关于SOAP Header 的使用,参见第二部分)

2.2 SOAP Body

SOAP Body 元素信息项提供一个简单的机制,用于与消息的最终接受者交换强制信息(即接受方必须处理的信息)。

Body元素信息项具备:

l        一个局部名Body

l        一个命名空间http://www.w3.org/2001/12/soap-envelope

l        零个或多个子元素信息项

其中Body元素上并不允许有额外的属性出现。

SOAP Body元素信息项的所有子元素信息项具备:

l        必须是命名空间修饰限定的

l        可以包含一个encodingStyle 属性信息项

下面我主要来介绍 Fault 元素,其他部分以及Body的使用将在第二部分中通过实例说明。

2.2.1 SOAP Fault

 Fault 元素是用于在SOAP 消息中传输错误或状态信息的。如果SOAP 信息需要包含SOAP Fault 元素,则它必须作为一个SOAP Body 元素的直接子元素的形式出现,同时它至多出现一次。

  Fault 元素信息项具备以下内容:

l        一个局部名:Fault

l        一个命名空间:http://www.w3.org/2001/12/soap-envelope

l        按照以下次序出现的两个或更多的子元素信息项:

Ø        一个强制出现的faultcode元素信息项

Ø        一个强制出现的faultstring元素信息项

Ø        一个可选出现的faultactor元素信息项

Ø        一个可选出现的detail元素信息项

       2.2.1.1 SOAP faultcode 元素

          faultcode 元素信息项具备以下内容:

l        一个局部名:faultcode

l        命名空间为空

       Faultcode 元素的类型是QName, QName 是在命名空间http://www.w3.org/2001/XMLSchema 中定义的类型,它的值为产生错误的SOAP结点所不能理解的SOAP Header条目的元素名

      2.2.1.2 SOAP faultstring 元素

        faultstring元素信息项具备以下内容:

l        一个局部名:faultstring

l        命名空间为空

  faultstring 元素信息项的类型是定义在命名空间是:

     http://www.w3.org/2001/XMLSchema 中的string .而它是为那些错误代码提供一个人可以理解的错误解释,它不是为程序处理而设的。

      2.2.1.3 SOAP faultactor  元素

     faultstring 元素信息项具备以下内容:

l        一个局部名:faultstring

l        命名空间为空

     faultstring 元素信息项的类型是定义在命名空间是:

     http://www.w3.org/2001/XMLSchema 中的 anyURI ,为在SOAP消息路径中描述到底是由哪个SOAP 结点引起该错误的发生这一细节提供了描述信息。

     2.2.1.4 SOAP detail 元素

     detail元素信息项具备以下内容:

l        一个局部名:detail

l        命名空间为空

l        零个或多个属性信息项

l        零个或多个子元素信息项

用于传输与SOAP Body元素相关的由应用程序所生成的特别的错误信息。如果SOAP Body 元素中的内容不能被成功地处理的时候,它必须出现。它不能被用于传输属于Header条目的错误信息,详细的属于Header 条目的错误信息必须在Header 条目中被表示并传输。

detail 元素信息项的所有子元素信息项都被称为detail 条目,每个detail条目信息项具备:

l        可以带有命名空间修饰限定

l        可以包含一个encodingStyle 属性信息项

SOAP encodingStyle 属性信息项被用来表明detail条目中使用的编码规则。

3.            SOAP 编码规则

SOAP编码风格是一个基于简单类型的系统,它是将程序设计语言,数据库等等中类型共有的特性一般化,例如简单类型,字符串,枚举,字符数组,以及一些复杂类型,默认值等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值