Web服务规范SOAP之理解SOAP
2007-11-12 10:31:27 来源:论坛整理 作者: 点击:
如果完全不熟悉 XML,在深入了解各个 Web 服务主题前,真的应该进行一些相关研究。不过,以下提供了继续学习所需的基本知识。
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 可以包括路由信息,像清单