科技行者

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

知识库

知识库 安全导航

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

Web服务规范SOAP之理解SOAP

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

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

  发送 SOAP 消息时,都是有目的性的。您在尝试告诉接收者执行某种操作,或尝试向服务器传递相关信息。此信息称为“有效负载”。有效负载位于 Envelope 的 Body 中。它还具有自己的命名空间,在本例中其命名空间与内容管理系统对应。在此情况下,可以完全随意地选择命名空间。只需要与 SOAP 命名空间相异即可(请参见清单6)。

  清单6. 有效负载示例

<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
...
</env:Header>
<env:Body>
  <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">
    <cms:category>classifieds</category>
    <cms:subcategory>forsale</cms:subcategory>
    <cms:articleHeadline></cms:articleHeadline>
    <cms: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.</cms:articleText>
  </cms:addArticle>
</env:Body>
</env:Envelope>

  在此例中,有效负载很简单,其中包含将文章添加到 Daily Moon 的内容管理系统的指令。

  如何设计有效负载的选择过程将涉及到样式和编码的内容。

  样式和编码

  简单来说,有两种不同的主流 SOA 消息编程样式。第一种是 RPC 样式,基于使用 SOAP 消息创建远程过程调用(Remote Procedure Call)的概念。在此样式中,基本思路是在向服务器发送命令(如“添加文章”),并将该命令的参数(如要添加的文章和应该添加到的类别)作为整个方法的子元素包含在其中,如清单7 中所示。

  清单7. RPC 样式

<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>

  RPC 样式的替代方法将数据直接作为 SOAP 体的内容处理,并在应用服务器对消息进行路由的信息中包含有关其所属的过程或函数的信息。(请参见清单8)。

  清单8. 将数据作为 SOAP 体中的内容

<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
  <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">
    <cms:category>classifieds</category>
    <cms:subcategory>forsale</cms:subcategory>
    <cms:articleHeadline></cms:articleHeadline>
    <cms: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.</cms:articleText>
  </cms:addArticle>
</env:Body>
</env:Envelope>

  RPC 样式的一个变体就是与上面看到的 RPC/literal 相对的 RPC/encoded。在这种情况下,消息中包含类型信息,如清单9 中所示。

  清单9. RPC/encoded 示例

<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
  <cms:addArticle xmlns:cms="http://www.daily-moon.com/cms">
    <cms:category xsi:type="xsd:string">classifieds</category>
    <cms:subcategory xsi:type="xsd:string">forsale
</cms:subcategory>
    <cms:articleHeadline xsi:type="xsd:string" />
    <cms:articleText xsi:type="xsd:string">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.</cms:articleText>
  </cms:addArticle>
</env:Body>
</env:Envelope>

  第二个样式称为 document/literal 样式,即将相应的数据直接添加到消息中,如清单10 中所示。

  清单10. Document/literal 样式示例

<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope">
<env:Header>
</env:Header>
<env:Body>
    <category>classifieds</category>
    <subcategory>forsale</subcategory>
    <articleHeadline></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>
</env:Body>
</env:Envelope>

  在这种情况下,消息本身并不包含有关数据所提交到的进程的信息,此工作由路由软件进行。例如,所有对特定 URL 或端点的调用都可能指向特定的操作。另外,从技术上讲,可以使用 document/encoded 样式,但目前还没有人这样做,因此可以将其忽略。

  在每个样式中都涉及到不同的折衷,本系列的第 2 部分将进一步对此进行详细讨论。不过,务必知道还有第三种样式“document wrapped”,并未正式地确定此样式,但由于各种互操作性原因而大受欢迎。在此情况下,有效负载的内容包装为单个元素,但元素并不据数据所属的过程或函数进行命名。从肉眼来看,这些消息几乎与 RPC/literal 消息完全相同。

  消息交换模式

  谈到发送消息,您有很多选择,可以发送请求并等待响应,发送请求但不等待响应,发送请求并在到达最终的目的地前通过多个中间层。但就实质而言,只有两个选择:

  请求/响应:在请求/响应模式种,以 SOAP 消息的形式发送请求,然后直接等待发送回响应。请求可以为同步的,也可以是异步的。

  单向消息传递:这种情况也称为“Fire and Forget”方法,发送请求但并不等待响应。可以在仅传递信息时或并不关心接收者对此如何响应时使用此方法。

  现在,请注意并没有使用术语“客户机”和“服务器”。之所以这样,是因为这些消息交换模式几乎可以用于创建与上面提到的方法类似的任意数量的不同备选方法。例如,可以发送一条请求,然后依靠接收者对其进行处理,并在将来完成应完成的工作时发送一条消息。为此,将使用多个单向消息的组合,因此谈“客户机”和“服务器”并不合理,因为每个消息都有其接收方和发送方,所谓的客户机和服务器的位置会发生对换。

查看本文来源

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

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

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