当前位置:编程学习 > C#/ASP.NET >>

SOAP Version 1.2中文手冊2

 

1. 引言

SOAP v1.2为在一个松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制。SOAP本身并不定义任何应用语义,如编程模型或特定语义实现,它只是定义了一种简单的机制,通过一个模块化的包装模型和对模块易做图定格式编码的数据的重编码机制来表示应用语义。SOAP的这项能力使得它可被很多类型的系统用于从消息系统到RPC(Remote Procedure Call)的延伸。

SOAP由四部分组成:

  1. SOAP envelop (SOAP信封,参阅 section 4),它构造定义了一个整体的表示框架,可用于表示在消息(message)中的是什么,谁应当处理它,以及这是可选的 还是强制的。

  2. SOAP encoding rules (SOAP编码规则,参阅 section 5),定义了一个编序机制用于交换应用程序定义的数据类型的实例。

  3. SOAP RPC representation (SOAP RPC表示,参阅 section 7),定义了一个用于表示远端过程调用和响应的约定。

  4. SOAP binding (SOAP绑定,参阅 section 6) 定义了一个使用底层传输协议来完成在结点间交换SOAP信封的约定。

为了简化本规范,这四部分在功能上是正交的。特别的,信封和编码规则是被定义在不同的命名空间(namespace)中,这样有利于通过模块化获得简明性。

本规范还定义了两种SOAP绑定(binding),用于描述SOAP消息(message)如何通过带或不带HTTP扩展框架[6](HTTP Extension Framework)的HTTP[5]消息(message)进行传输。

1.1 设计目标

SOAP的主要设计目标是简明性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的特性将不包含在SOAP的核心规范中。这些特性包括:

  • 分布式垃圾收集 (distributed garbage collection);

  • 批量消息传输/处理 (boxcarring or batching of messages);

  • 对象引用 (objects-by-reference, 需要分布式垃圾收集的支持);

  • 对象激活 (activation, 需要对象引用的支持)。

1.2 符号约定

本文中的关键词“MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL”的语义应当参阅RFC-2119[2]。在本中文版规范中被翻译成:“必须”、“必须不”,“需要的”,“将”,“将不”,“应该”,“应该不”,“被推荐的”,“可以”,“可选的”。

本文中使用的命名空间前缀“env”和“enc”等关联的SOAP命名空间分别位于以下位置:"http://www.w3.org/2001/06/soap-envelope" 和"http://www.w3.org/2001/06/soap-encoding"。

在本文的全部内容中,命名空间前缀"xs"和"xsi"总假定是与"http://www.w3.org/2001/XMLSchema" 和"http://www.w3.org/2001/XMLSchema-instance"相关联的,这是由XML Schemas规范[10,11]所定义的。

值得注意的是其他的对命名空间前缀的使用都是比较随意的而并没有显著语义的约束的。

若命名空间的URI使用"http://example.org/..."或"http://example.com/..."的形式,表明这是一些应用依赖或上下文依赖的URI[4]

本规范使用扩充BNF(Backus-Naur Form)作为构造语言,可参阅RFC-2612 [5]

编辑的注解将使用黄色背景标识(也许无法在所有的媒介上显示),并使用前缀"Ednote"。

1.3 SOAP消息示例

第一个例子展示了一个使用SOAP表示的简单的通知消息。该消息包含了一个消息头"alertcontrol"和消息体"alert",这两部分都是由应用程序定义的,而而并不是由SOAP定义的。消息头包含了两个参数"priority"和"expires",用于消息传输中介和消息接受者对消息的处理。而消息体中则包含是实际传送的消息。

Example 0
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"> 

 <env:Header>

  <n:alertcontrol xmlns:n="http://example.org/alertcontrol">

   <n:priority>1</n:priority>

   <n:expires>2001-06-22T14:00:00-05:00</n:expires>

  </n:alertcontrol>

 </env:Header>

 <env:Body>

  <m:alert xmlns:m="http://example.org/alert">

   <m:msg>Pick up Mary at school at 2pm</m:msg>

  </m:alert>

 </env:Body>

</env:Envelope>
Sample SOAP Message containing a header block and a body block

SOAP消息能够与不同的底层协议进行绑定,同时可以在很多种消息传输模式中使用。下面的例子则展示了SOAP是如何在HTTP的连接中使用的,其中充分使用了HTTP提供的请求/相应机制(参阅 section 6)。

Example 1和Example 2展示了一个SOAP/HTTP请求的例子和一个SOAP/HTTP响应的例子。SOAP/HTTP请求包含了一个获取最后交易价格(GetLastTradePrice)的信息块,其中包含了一个简单的参数,指明需要报价的股票代号。同样,与先前的例子相似,GetLastTradePrice这个XML元素也并不是由SOAP自身定义的。该请求的服务响应也包含了一个简单的参数,股票的价格。SOAP信封元素是表示SOAP消息的XML文档的顶级元素。XML命名空间则用来消除SOAP标识符与应用定义的标识符之间可能存在的歧义。

Example 1
POST /StockQuote HTTP/1.1

Host: www.stockquoteserver.com

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

SOAPAction: "http://example.org/2001/06/quotes"



<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" >

 <env:Body>

  <m:GetLastTradePrice 

        env:encodingStyle="http://www.w3.org/2001/06/soap-encoding"

        xmlns:m="http://example.org/2001/06/quotes">

    <symbol>DIS</symbol>

  </m:GetLastTradePrice>

 </env:Body>

</env:Envelope>
Sample SOAP Message embedded in an HTTP Request

Example 2展示了StockQuote服务响应由Example 1描述的请求消息而返回的SOAP消息。

Example 2
HTTP/1.1 200 OK

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn



<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" >

 <env:Body>

  <m:GetLastTradePriceResponse 

        env:encodingStyle="http://www.w3.org/2001/06/soap-encoding"

        xmlns:m="http://example.org/2001/06/quotes">

   <Price>34.5</Price>

  </m:GetLastTradePriceResponse>

 </env:Body>

</env:Envelope>
Sample SOAP Message embedded in an HTTP Response

Appendix A中提供了更多的例子。

1.4 SOAP术语

1.4.1 协议概念

SOAP

关于SOAP消息的格式和处理规则、为沿着SOAP消息路径交换信息而需要的不同应用程序之间生成接收SOAP消息的交互过程的简单控制机制等的一整套规范和约定。

SOAP绑定

为传输的需要而将SOAP消息在另一个底层协议之上或之内传输的一整套规范和规则。典型的SOAP绑定包括在HTTP消息中传送SOAP消息或在TCP之上传送SOAP消息等。

SOAP结点

SOAP结点根据SOAP定义的整套规范来处理SOAP消息。SOAP结点有责任遵守SOAP消息交换的规则以及提供通过依赖底层协议的SOAP绑定来访问的服务。任何不符合SOAP约定的情况都将导致SOAP结点产生一个SOAP错误(可参阅SOAP接受者S

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,