节选自IBM developerWorks《Web 服务的体系结构和最佳实践

关于“编码样式”:

SOAP 规范指定了一个名为“encodingStyle”的模式,它可以取两个值,“encoded”和“literal”。

编码的(encoded):指的是 SOAP 规范的第5节,这一节定义了将编程语言的类型映射到 XML 的基本机制。

文字的(literal):意味着您不用做这些工作。取而代之的是,这些类型信息是由外部机制提供的,更像使用 XML schema来确切地定义 SOAP 消息中使用的类型的 WSDL 文档。

这其中的缘故是因为 SOAP 规范是在采用 XML Schema 规范之前编写的。因此,原始的 SOAP 规范必须提供一种方法来指明编码类型信息。与 XML Schema 完全不同的地方是数组。SOAP 规范的5.4.2节指定了一种特别的机制来表示 XML 中的编程语言数组,它使用一种特别的 SOAPEnc:ArraySchema 类型。同时,编码信息(比如 <item xsi:type=”xsd:string”>)通常与用 SOAP 编码标准的 SOAP 消息体元素相关联。

然而,自从采用 XML Schema 之后(您会记得,WSDL用来表示它的类型),大多数语言使用自己的从 XML Schema 到编程语言类型之间的映射(或序列化规则),这使得 SOAP 编码变得过时。因此,推荐不要采用SOAP 编码,而是采用使用文字编码,在文字映射中由 XML Schema 文档(通常是 WSDL 文档的形式)从外部指定映射。

关于“绑定样式”:

WSDL 规范在它的 SOAP 绑定中指定了两种不同的“绑定样式”。绑定样式属性的值是“RPC”和“Document”。其含义是,如果一个WSDL文档指定了一种绑定样式属性设置为“RPC”的操作,那么接收者就必须要用 SOAP 规范第7节中的规则来解释消息。这意味着,例如,在 SOAP 体中的 XML 元素(称为“包装的元素”)必须具有一个与将要调用的对应编程语言操作名称相同的名称。在这个元素中的每个消息部分必须(在名称和次序方面)严格地对应于该编程语言操作的参数。最后,必须只有单个的元素返回(这个元素必须命名为 XXXResponse,其中,XXX 是语言中对应的操作的名称),返回元素中严格地只包含一个元素,那是操作的返回值。

“Document”绑定样式较为宽 松。文档绑定样式中的消息必须仅仅由形式良好、名称空间限定的 XML 组成。由接收它的 SOAP 引擎来决定如何解释它。使用“Document”绑定样式和“Literal”编码来表示 RPC 也是很常见的(例如在 Microsoft 的工具中)。在这样的情况下,发送者将还要遵循 SOAP 规范的第7节中的许多或所有的规则来描述消息,但是要由接收者来决定如何处理这些消息,要么作为一个 RPC 调用,要么作为需要处理的文档。特别地,还有一个外部元素来表示(和命名)操作,而这个元素包括表示消息参数的元素。

推荐在 WSDL 中使用“Document”绑定样式和“Literal”编码。