科技行者

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

知识库

知识库 安全导航

至顶网软件频道基础软件Web服务规范SOAP之理解SOAP

Web服务规范SOAP之理解SOAP

  • 扫一扫
    分享文章到微信

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

XML 是一种“标记语言”,即给出了一种提供实际内容的附加信息的方式。此信息以“标记”的形式提供,这些标记用于指示“元素”。

作者:佚名 来源:论坛整理 2007年11月17日

关键字: Web服务 SOAP

  • 评论
  • 分享微博
  • 分享邮件
XML 简介

  进行传递的所有这些消息都基于可扩展标记语言(Extensible Markup Language,XML)。如果完全不熟悉 XML,在深入了解各个 Web 服务主题前,真的应该进行一些相关研究。不过,以下提供了继续学习所需的基本知识。

  XML 是一种“标记语言”,即给出了一种提供实际内容的附加信息的方式。此信息以“标记”的形式提供,这些标记用于指示“元素”。例如,考虑一下清单1 中所示的简单 XML 文档。

  清单1. 包含基本内容的 XML 文件

<article articleId="88271" categoryId="classifieds" subcategoryId="forsale">
  <articleHeadline>Fun, fun, fun</articleHeadline>
  <articleText>Vintage 1963 T-Bird.  Less than 300 miles.
Driven by my daughter until I took it away.  Serious
inquires only.  555-3264 after 7 PM.</articleText>
</article>

  请留意此文本中的几个值得注意的地方。首先,这是文本。这就使其可以供任何人阅读,或在其中包含关于任何事物的内容。其次,标记使用 > 和 < 指示,开始标记具有一个名称,并可能带有各种属性(如文章 ID),而结束标记以反斜杠 (/) 表示。元素必须为自包含的,并进行了恰当嵌套。也就是说,不能使用与清单2所示类似的 XML 文档。

  清单2. 无效 XML 文档示例

<article articleId="88271" categoryId="classifieds" subcategoryId="forsale">
  <articleHeadline>Fun, fun, fun
  <articleText></articleHeadline>Vintage 1963 T-Bird. 
Less than 300 miles. Driven by my daughter until I
took it away.  Serious inquires only.  555-3264 after
7 PM.</articleText>
</article>

  XML 还提供了将内容划分为不同“命名空间”的方法,以便由应用程序对其进行不同的处理。例如,SOAP 消息可能与以下的清单3 类似。

  清单 3. 示例 SOAP 消息

<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
  <cms:getNumberOfArticles xmlns:cms="http://www.daily-moon.com/cms">
    <cms:category>classifieds</cms:category>
    <cms:subcategory>forsale</cms:subcategory>
  </cms:getNumberOfArticles>
</env:Body>
</env:Envelope>

  不要担心消息的实际结构,但要注意存在两种不同的“前缀”,每个前缀与特定的命名空间对应。在这种情况下,我们是为了将 SOAP“信封”与实际的有效负载进行区分。

  再次说明,关于 XML 有很多需要学习,但这些只是本教程需要了解的基础知识。

  SOAP 信封

  Web 服务消息的基本单元是实际的 SOAP 信封。这是包含处理消息所必需的所有信息的 XML 文档(请参见清单4)。

  清单4. 示例 SOAP 信封

<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
</env:Body>
</env:Envelope>

  在本例中,获得了一个简单的 Envelope,其命名空间指定为 SOAP 1.2 版本。其中包含两个子元素 Header 和 Body。让我们了解一下这两个子元素所起的作用。

  SOAP Header

  SOAP 消息中的 Header 用于提供有关消息本身的信息,与用于应用程序的信息相对。例如,Header 可以包括路由信息,像清单5 中的示例类似。

  清单5. Header 中的路由信息

<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
  <wsa:ReplyTo xmlns:wsa=
        "http://schemas.xmlSOAP.org/ws/2004/08/addressing">
   <wsa:Address>
http://schemas.xmlSOAP.org/ws/2004/08/addressing/role/anonymous
   </wsa:Address>
  </wsa:ReplyTo>
  <wsa:From>
   <wsa:Address>
http://localhost:8080/axis2/services/MyService</wsa:Address>
  </wsa:From>
  <wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
  </env:Header>
<env:Body>
</env:Body>
</env:Envelope>

  本例中有一个 WS-Addressing 元素,其中包含有关消息将送达何处以及应将应答送达何处的信息。Header 可包含关于消息本身的所有类型的消息。事实上,SOAP 规范中使用了大量篇幅说明哪些元素可以放入 Header以及应由“SOAP 中间层”如何对其进行处理。也就是说,SOAP 规范并不假定消息将直接从一个点传递到另一个点(从客户机到服务器)。规范考虑了 SOAP 消息在送达最终目的地的过程中可能实际由多个中间层处理的情况,很清楚地说明了中间层应如何对待在 Header 中找到的信息。不过,对此的讨论不在本教程的范围之内。因此,目前只要知道 Header 可以提供许许多多的功能(如果您需要)即可。

  接下来让我们看看实际的有效负载。

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

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

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