科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道SOAP协议的结构格式

SOAP协议的结构格式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

封套的报文部分总是用于 最终接收的消息,而报头项目可以确定执行中间处理的目标节点。SOAP协议提供了一种让客户端指定哪个中间处理节点必须处理报头项目的方法。在SOAP封套报头示例中标识的第一个元素是一个transaction(交易)元素,它 带有一个命名空间属性和一个值为1的mustUnderstand属性。

来源:ZDNet网络频道 2010年7月15日

关键字: 网络

  • 评论
  • 分享微博
  • 分享邮件

对于简单对象访问协议,也就是SOAP协议大家了解多少呢?我们本文就来对这个协议的结构进行一下细致地讲解。希望对您能有所帮助。那么首先来看一下这方面的定义吧。SOAP:简单对象访问协议(SOAP:Simple Object Access Protocol)

简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。SOAP可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

SOAP包括三个部分:

SOAP封装:它定义了一个框架 , 该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。

SOAP编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。

SOAPRPC 表示:它定义了用于表示远程过程调用和应答的协定。

SOAP消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求 / 应答的模式。所有的SOAP消息都使用 XML 编码。一条SOAP消息就是一个包含有一个必需的SOAP的封装包,一个可选的SOAP标头和一个必需的SOAP体块的 XML 文档。

把SOAP绑定到 HTTP 提供了同时利用SOAP的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的优点。在 HTTP 上传送SOAP并不是说SOAP会覆盖现有的 HTTP 语义,而是 HTTP 上的SOAP语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用SOAP并不仅限于 HTTP 协议绑定。

消息格式

SOAP在标准化消息格式环境中,可以做所有它能完成的工作。消息的主体部分 是“text/xml”形式的MIME类型,并且包含一个SOAP封套。该封套是一个XML文 档。封套包含了报头(可选的)和报文(必须有的)。封套的报文部分总是用于 最终接收的消息,而报头项目可以确定执行中间处理的目标节点。附件、二进制 数字及其他项目可以附加到报文上。

SOAP协议提供了一种让客户端指定哪个中间处理节点必须处理报头项目的方法。由于报头与SOAP消息的主体内容是互不相关的,所以可用它们给消息添加信息,而 不会影响对消息报文的处理。

例如,报头可用于为报文中包含的请求提供数字签名。在这种情形下,身份验证/授权服务器可以处理报头项目独立于报文可以剥离信息以验证签名。 一旦通过验证,封套的其余部分将被传递给SOAP服务器,它将对消息的报文进行处理。深入研究一下SOAP封套,有助于明了SOAP报头和报文元素的位置和用途。

剖析SOAP封套

SOAP1.1规范提供了下面的封套示例:SOAP-ENV:mustUnderstand=1 5DEF

在这个例子中,GetLastTradePrice请求被传送给网络上某个位置的一个存储。

引用服务

该请求带有一个字符型参数,一个订单符号,并在SOAP响应中返回一 个浮点数。SOAP封套是表示SOAP消息的XML文档的顶层元素。XML命名空间用于将SOAP标识 符与应用程序的特定标识符区分开。XML命名空间在SOAP协议中使用很频繁,以把消息 的元素的作用域限制在一个特定的领域。理解SOAP协议命名空间有助于熟悉XML命名空 间规范。如果您没有理解命名空间,也可以简单地把它看作一种邻近的标识符, 它通过把SOAP元素与特定的位置(真实的或想像的)相关联,从而有助于惟一地 标识SOAP元素。

命名空间

上面例子中的第一个命名空间参照了在SOAP消息中定义元素和属性的SOAP模式。第二个命名空间参照了SOAP编码,即前文中讨论过的“Section 5”数据类型。 由于没有指定额外的通用元素编码,这种编码将适用于整篇文档。

报头

在SOAP封套报头示例中标识的第一个元素是一个transaction(交易)元素,它 带有一个命名空间属性和一个值为1的mustUnderstand属性。既然mustUnderstand的属性值设为1 ,接受该消息的服务器必须在该transaction节点上执行中间处理。您可以对此 作这样的解释:服务器与客户端事先已就管理该报头元素处理的语义达成了一 致,因而服务器确切地知道要处理的元素的内容,本例中元素的内容是“5”。 如果接收消息的服务器不理解transaction报头的语义,它就会拒绝请求并抛出 一个错误。错误元素是SOAP报文和定义良好的机制的一个特殊部分,用于把错误信 息送回给客户端。

像这样的中间处理节点是SOAP可扩展性的一个例子。客户端在SOAP消息中包含 这样的节点,以在可以处理消息的报文内容前,指示要发生的特殊的处理需要。 要保证向后兼容不能提供这种处理的现有的服务器,只需把mustUnderstand 属性设置为0,它使操作是可选的。除了定义像上例中所示的transaction节点外,SOAP消息还可包含报头项目, 它们用于指定节点执行身份验证处理、加密、状态的永久性、业务逻辑处理等。 报头有助于把SOAP协议构建成一种可扩展的模态包模型。只需记住报头处理是完全独 立于SOAP消息的报文的。

报文

上面例子中的SOAP报文包含一个XML载荷,我们可以推测RPC没有为我们对其作详细解释。SOAP不仅是一种模态包模型,它还是一种相当神秘的包模型。没有什么迹象清楚地显示RPC将要开始做什么。我们在报文中所看到的是几个 XML元素,其中一个用命名空间进行了限制。它取决于SOAP服务器理解文档语义并 执行正确的处理。事实上,服务器提供了一种架构,以有意义的方式处理XML载 荷。这里的“有意义”意味着服务器在某些后台数据库上调用远程过程,以为消 息报文中包含的股票-符号元素接收股票价格。所有这些魔术般的操作都是在SOAPRPC幕后发生的。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章