WSDL绑定样式各种组合优劣势比较

400G光模块测试全攻略:从PCS层到CMIS合规的避坑指南 本文为网络设备测试工程师和光通信研发人员提供了一份详尽的400G光模块测试实战指南。文章深入剖析了从PCS层信号完整性、FEC容限到CMIS管理接口合规性测试的全流程,并分享了ANLT协议分析、SerDes眼图调试以及系统级流量压力测试中的核心技巧与常见避坑点,旨在帮助读者构建一套高效、精准的测试体系,确保高速光模块的可靠性与性能。 阅读详情

WSDL绑定样式各种组合优劣势比较  


目前Web服务的相关标准是WSDL【Web服务描述语言】,一种标准的类似XML Schema的语言,用它来详细说明Web服务和SOAP【简单对象访问协议】,Web服务使用的实际的沟通协议就是SOAP。WSDL 绑定样式由两个属性组合而成:style、use;style可以是RPC/Document,use可以是Encoded/Literal;下面解释下这4个名词的意思:

RPC 样式

RPC样式指定<soap:body> 元素包含一个将被调用的web方法的名称的元素(wrapper element(封装元素))。这个元素依次为该方法的每个参数还有返回值作了记录。

Document 样式

如果是document 样式,就没有像在RPC样式中的wrapper元素。转而代之的是消息片断直接出现在<soap:body> 元素之下。没有任何SOAP格式化规则规定<soap:body>元素下能包含什么;它包含的是一个发送者和接收者都达成一致的XML文档。

Encoded 编码 

如果use的值是”encoded”, 则每个消息片段将使用类型属性来引用抽象类型。通过应用由 encodingStyle 属性所指定的编码样式,可使用这些抽象类型生成具体的消息。最常用到的SOAP编码样式是在SOAP1.1中定义的一组序列化规则,它说明了对象、结构、数组和图形对象应该如何序列化。通常,在应用程序中使用SOAP编码着重于远程进程调用和以后适合使用RPC消息样式。

Literal 文字? 

如果use 的值是”Literal”, 则每个片段使用 element 属性(对于简单片段)或 type 属性(对于复合片段)来引用具体架构,例如,数据根据指定的架构来序列化,这架构通常使用W3C XML架构来表述。

根据不同的组合,形成了四种绑定模型;另外,还有一种用Document模拟RPC样式的包装组合也很常见;

  1. RPC/Encoded
  2. RPC/Literal
  3. Document/Encoded
  4. Document/Literal
  5. Document/Literal Wrapped

从生成soap消息的角度看:

rpc和document的差别在于方法的操作名是否出现在生成的Soap消息中。use="literal" 意味着type定义遵循xml模式定义

document:<soap:body>的内容由定义在<wsdl:type>中的xml模式指定。他不需要遵循特定的soap规范。简言之,
soap消息是通过<soap:body>中的document发送出去,而没有额外的要遵循的格式规则。document style是一种默认的选择。

      rpc: <soap:body>元素的结构需要遵循特定的规则(soap1.1规范第7部分有细节)。根据这些规则,<soap:body>可以
包含唯一一个元素,这个元素在operation后被命名,所有的参数都必须写成这个元素的子元素。

      literal和encoded编码方式的差别在于参数类型是否出现在生成的Soap消息中。use="encoded" 参考xml中已有的应用数据,通常指的是soap1.1规范中的soap编码规则。如果文档中没有自定义数据,就可以选择encoded。


对于以上5种组合方式,由于Document/Encoded不被现有平台所支持,在实际中应用很少,所以这里就暂时不讨论该种组合;对于剩下的4种组合,我们结合一个表格和实例来对比下各自的优劣情况;

Binding TypeAdvantage/DisAdvantage
RPC/
Encoded
优点:
  1. WSDL文件的定义遵循直观和众所周知的远程进程调用的沟通模式。
  2. 操作名显示在消息中,因此接收者很容易就把消息分派给它的实现。
  3. 如果你正在你的服务中使用数据图形或者多态,这是惟一能使用的样式。

缺点:

  1. SOAP消息包含的类型编码信息就如xsi:type="xsd:int",这些就是一种开销。
    性能比较差。 
  2. 通常验证SOAP消息是很困难的,因为在WSDL Shcema中没有描述。
  3. RPC样式引起了一种在服务提供者和客户之间的紧密耦合,任何对接口的
    更改都会导致服务和客户间联系的中断。
  4. 不被WSI一致性标准所支持。
RPC/
Literal

优点:

  1. WSDL定义仍然像RPC/Encoded样式一样简单直接。
  2. 操作名仍然出现在SOAP消息中。
  3. 把类型编码从消息中排除了,因此提升了吞吐性能。

缺点:

  1. 服务和客户之间仍然有紧密耦合。
  2. 仍然难以用SOAP消息来验证传输的数据。
  3. 它也不被WSI一致性标准所支持。 
Document/
Litaral

优点:

  1. 在SOAP消息中没有类型编码信息。
  2. 你总能用任何XML验证器来验证消息,在soap体中任何东西都在schema中
    有定义。
  3. 使用document样式,规则不是那么严格,还有对XML Schema进行增强和
    更改时不会破坏接口。
  4. 如果使用某特殊序列进行多进程调用,Document 样式可以保持应用程序的
    状态。
  5. Document样式更加适合异步处理。
  6. 许多document-messaging服务能够选择文档的DOM和SAX 两种处理方式的
    其中一种,结果就是能最小化在内存中的处理。

缺点:

  1. WSDL定义变得更加复杂。
  2. 在SOAP消息中的操作名没有了,没有了名称,把消息分派给它的实现方法
    就变得困难或不可能了。 
    WS-I 基本概要(WS-I Basic Profile)规定文档/文字的消息的组成部分引用
    元素而不是类型
Document/
Literal
Wrapped

优点:

  1. 包含了所有Document/Literal样式的优点。
  2. 操作名出现在SOAP消息中。

缺点:

  1. 即使WSDL定义变得更加复杂,但仍然有不少缺点。
  2. 如果你在web服务中重载了操作,你就不能使用该样式。 

假设我们需要调用的WS的method为:public void myMethod(int x); 各种绑定样式生成的WSDL/SOAP片段如下:

Binding TypeWSDLSOAP
RPC/ Encoded
<message name="myMethodRequest">  
    <part name="x" type="xsd:int" />  
</message>  
<message name="empty" />  
<portType name="PT">  
    <operation name="myMethod">  
        <input message="myMethodRequest" />  
        <output message="empty" />  
    </operation>  
</portType>  
<binding>  
    <!-- RPC/encoded. -->  
</binding>
<soap:envelope>  
<soap:body>  
  <myMethod>  
<x xsi:type="xsd:int">5</x>
  </myMethod>  
</soap:body>
</soap:envelope> 
RPC/ Literal
<message name="myMethodRequest">  
    <part name="x" type="xsd:int" />  
</message>  
<message name="empty" />  
<portType name="PT">  
    <operation name="myMethod">  
      <input message="myMethodRequest" />  
      <output message="empty" />  
    </operation>  
</portType>  
<binding>  
    <!-- RPC/literal. -->  
</binding>  
<soap:envelope>  
    <soap:body>  
        <myMethod>  
          <x>5</x>  
        </myMethod>  
    </soap:body>  
</soap:envelope>  

Document/ Litaral
<types>  
    <schema>  
      <element name="xElement" type="xsd:int" />  
    </schema>  
</types>  
<message name="myMethodRequest">  
    <part name="x" element="xElement" />  
</message>  
<message name="empty" />  
<portType name="PT">  
    <operation name="myMethod">  
        <input message="myMethodRequest" />  
        <output message="empty" />  
    </operation>  
</portType>  
<binding>  
    <!-- document/literal. -->  
</binding> 
<soap:envelope>  
  <soap:body>  
   <xElement>5</xElement>  
  </soap:body>  
</soap:envelope> 
Document/ Literal Wrapped
<types>  
    <schema>  
        <element name="myMethod" />  
        <complexType>  
          <sequence>  
           <element name="x" type="xsd:int" />  
          </sequence>  
        </complexType>  
        </element>  
    </schema>  
</types>  
<message name="myMethodRequest">  
  <part name="parameters" element="myMethod" />  
</message>  
<message name="empty" />  
<portType name="PT">  
    <operation name="myMethod">  
      <input message="myMethodRequest" />  
      <output message="empty" />  
    </operation>  
</portType>  
<binding>  
    <!-- document/literal. -->  
</binding>  
<soap:envelope>  
    <soap:body>  
      <myMethod>  
          <x>5</x>  
      </myMethod>  
    </soap:body>  
</soap:envelope> 

采用 RPC/编码的理由有很多。其中两个主要的原因是: 
数据图形 
多态性 
数据图形 

设想您有一个二进制树,其中的节点定义在 清单12中。

清单12. 二进制树节点 Schema
       
<complexType name="Node"> 
     <sequence>
          <element name="name" type="xsd:string"/>
          <element name="left" type="Node" xsd:nillable="true"/>
          <element name="right" type="Node" xsd:nillable="true"/>
      </sequence>
</complexType>  

 

根据这种节点定义,我们可以构造一个树形结构,它的根节点 A 通过它左边和右边的的链接可以指向节点 B(请参见 图1)。


编码的树

发送数据图形的标准方式是使用 href 标记,它是 RPC/编码的样式( 清单13)的一部分。


清单:13. RPC/编码的二进制树
<A>
      <name>A</name>
      <left href="12345"/>
      <right href="12345"/>
</A>
<B id="12345">
      <name>B</name>
      <left xsi:nil="true"/>
      <right xsi:nil="true"/>
</B>  

在任何文字的样式中,href 属性都是不可用的,这样图形链接就不再起作用了( 清单14和 图2)。您仍然有一个根节点 A,它从左边指向一个节点 B,从右边指向另一个节点 B。这两个 B 节点是等同的,但它们不是相同的节点。是复制了数据而不是引用了两次数据。


14. 文字二进制树
<A>
      <name>A</name>
      <left>
          <name>B</name>
          <left xsi:nil="true"/>
          <right xsi:nil="true"/>
      </left>
      <right>
          <name>B</name>
          <left xsi:nil="true"/>
          <right xsi:nil="true"/>
      </right>
</A>

文字树

在文字样式中,您可以通过各种方法构造图形,但是却没有标准的方法;所以您做的任何事情很可能不能与网络中其他端点上的服务进行互操作。

多态性

看一看 清单15中使用多态性 Schema 的 WSDL。

清单 15. 一个多态性 WSDL 的示例
<types>
    <schema>
      <complexType name="animal">
        <sequence>
          <element name="name" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="dog">
        <complexContent mixed="false">
          <extension base="animal">
            <sequence>
              <element name="breed" type="xsd:string"/>
            </sequence>
          </extension>
        </complexContent>
      </complexType>
    </schema>
</types>
<message name="in">
    <part name="trainee" type="animal"/>
</message>
<message name="empty"/>
<portType name="AnimalTrainer">
    <operation name="train">
      <input message="in"/>
      <output message="empty"/>
    </operation>
</portType>  

当您把一个 dog 的实例传送给 train 操作时,所生成的 SOAP 消息必须包含类型编码信息,这样接收终端才能知道它所接收的是 animal 的哪一个扩展(请参见 清单16)。这种类型编码信息可用在 RPC/编码的样式中。

清单 16. 一个多态性 SOAP 消息
<soap:envelope>    <soap:body>      <train>        <trainee xsi:type="Dog">          <name>Bob</name>          <breed>Bloodhound</breed>        </trainee>      </train>    </soap:body>  </soap:envelope>

1、使用普通Document/literal模式的情形:
    当存在方法重载(overload)时,
      public void myMethod(int x, float y);
      public void myMethod(int x);
    此时,我们无法在WSDL中定义两个相同名称的复杂类型作为方法的输入参数。
    (wrapper模式要求方法输入参数的复杂类型名誉方法名相同)

2、使用RPC/literal的情形:
    当同时存在重载方法与不同名但参数列表相同的方法时
    (1)public void myMethod(int x, float y);
    (2)public void myMethod(int x);
    (3)public void someOtherMethod(int x, float y);
    此时,Document/literal由于没有方法名无法区分(1)方法与(3)方法

3、使用RPC/encoded的情形:
    当需要传递数据图(data graph)信息时,需要使用href属性。
    而任何literal风格的SOAP消息是不允许使用href属性的

转自:老唐 的专栏
           我应该彩哪一种WSDL样式 (Russell Butek, 软件工程师, IBM)
           SOAP风格中 RPC与Document的区别
           Web Service描述语言 WSDL 详解   

【OpenClaw从入门到精通】第15篇:国产芯片适配实战——昇腾/龙芯/天数智芯全流程跑通(2026实测版) 2026年国产芯片AI适配迎来爆发期,OpenClaw作为轻量化本地AI智能体,已实现华为昇腾、龙芯、天数智芯等主流国产平台的全流程适配。本文基于实测数据,从背景解析、核心原理、算法优化、实操部署四个维度,详细讲解OpenClaw在香橙派昇腾开发板、龙芯3B6000M、天数彤央TY1200及联想开天X7h的部署流程,同时提供统一工具玄武CLI的使用指南。文中包含完整代码、执行结果、避坑技巧及虚拟实战案例,兼顾新手入门与进阶提升,帮助读者快速掌握国产芯片上的本地AI部署能力,实现数据隐私保护与低成本AI落地。 阅读详情

相关推荐

别再只调包了!深入理解机器学习虚拟筛选中的分子指纹(ECFP/Morgan)

本文深入探讨了ECFP/Morgan分子指纹在机器学习虚拟筛选中的应用与优化策略。通过解析半径参数与比特长度的化学意义,揭示了如何通过参数调优提升模型性能20%以上,特别适用于药物发现领域的高通量筛选。文章还提供了工程实践中的参数优化策略和多指纹融合技术,为开发者提供从理论到实践的全面指导。

weixin_33704234的博客 829

WSDL的binding标签中 use/style 属性详解

根据WSDL定义,binding标签用于将抽象的数据定义与具体的实现协议、编码方式等进行绑定。这里用到两个重要的属性:  style:RPC、Document  use:encoded、literal<binding>标签片段如下: <binding name="ExamplePortBinding" type="tns:Example"> &...

weixin_30369041的博客 471

【深度解析】信息素养提升实践活动(附:历年获奖作品分析)

全国师生信息素养提升实践活动是由教育部教育技术与资源发展中心(中央电化教育馆)主办,面向全国师生的一项信息化交流展示活动。

m0_74417957的博客 9649

PHP 中使用 SOAP(2)

PHP 中使用 SOAP

张庆(网眼) 2193

Java服务端实现Google Pay支付功能

全网最全代码、最清晰服务端处理Google Pay,最清晰讲解Google Pay集成逻辑。

jack2350536098的博客 1万+

某程token参数逆向分析

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

weixin_73499887的博客 2882

SOAP协议解析

一、SOAP协议简介 1、SOAP简介  SOAP(Simple Object Accrss Protocol,简单对象访问协议)是一种简单的基于XML的协议,可以使应用程序在分散或分布式的环境中通过HTTP来交换信息。           SOAP基于XML语言和XSD标准,其定义了一套编码规则,编码规则定义如何将数据表示为消息,以及怎样通过HTTP协议来传输SOAP消息,由四部分组成: ...

baidu_25340817的博客 5万+

解决鸿蒙/荣耀设备GMS应用调试中的“Play保护机制认证”报错

本文详细解析了在鸿蒙或荣耀设备上调试GMS应用时,遇到“Play保护机制认证”报错的根本原因与解决方案。核心在于获取设备的GMS Device ID,并通过Google官方渠道完成临时注册,从而绕过认证限制。文章提供了无需Root和ADB查询两种具体方法,并分享了授权后的故障排查与实战经验,帮助开发者高效解决问题。

weixin_29288313的博客 298

SOAP传输协议

网络通信协议soap

weixin_44651073的博客 6563

全同态加密:CKKS

不论是 LSB 编码的 BGV,还是 MSB 编码的 BFV,它们的同态运算都是对 $\mathbb Z_t$ 上明文的**精确计算**,因为**密文中的明文空间和噪声空间是分离的**。例如,在 BGV 中是 $te+m$,在 BFV 中是 $\delta m+e$。但是,这种精确计算是在同余意义下的,如果将明文视为实数,那么实际上同态运算时的噪声破坏了明文的 MSB $\lfloor m/t \rfloor$,仅保留了 LSB $[m]_t$,

weixin_44885334的博客 7544

苏宁易购手机行情比价系统:构建一个完整的Python爬虫实战指南

在当今数字化时代,智能手机已成为人们生活中不可或缺的一部分。随着各大手机品牌每年推出多款新品,消费者面临着越来越多的选择。然而,不同电商平台、不同时间段的价格波动使得消费者很难把握最佳购买时机。苏宁易购作为国内领先的电商平台之一,拥有丰富的手机商品信息和价格数据。本文将带领读者构建一个完整的苏宁易购手机行情比价系统,帮助消费者实时掌握手机价格动态。

2201_76125261的博客 207

WebService之WSDL文档元素详解 (转)

WSDL的主要文档元素 WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。在上述的文档元素中,、、属于抽象定义层,、属于具体定义层。所有的抽象可以是单独存在于别的文件中,也可以

yilongzhetian的博客 793

35、使用 Geo 创建 GitLab 的分布式只读副本

本文详细介绍了如何使用GitLab Geo功能创建分布式只读副本,涵盖数据库主从配置、SSH密钥查找方式更改、通过Web UI添加从节点、激活哈希存储及状态检查等关键步骤。同时提供了常见问题解答和配置流程图,帮助用户快速部署并维护Geo集群,实现跨地域的高效数据同步与高可用架构。

chair的专栏 80

soap 协议学习

1 soap与http关系 http:是一个客户端和服务器端请求和应答的标准(TCP)。http协议其目的是为了提供一种发布和接收htttp页面的方法 一http协议的客户端与服务器的交互:由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.

sun8288的专栏 788

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

资源页跳转(持续更新中)

文章目录1 算法1.1 蓝桥杯历年真题1.2 面试中的排序算法总结1.3 八大排序算法2 JAVA3 前端3.1 网站素材4 安卓4.1 飞行的不知名小鸟4.2 实现闪烁的星星????????????4.3 Android日历及表盘5 C#5.1 C#类库5.2 Effective C#(covers C# 6.0).pdf6 毕设参考(超正!)6.1 基于Python的飞机大战游戏系统设计与实现源程序6.2 python的电商运动服装销售的分析源码6.3 基于新浪微博评论的情感分析源码6.4 基于svm垃

ancientear的博客 1451

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Apache CXF notes

关于Apache CXF Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Tra...

alimama 173

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SOAP消息的绑定机制

SOAP消息的绑定机制 来源:北京航空航天大学计算机学院   作者:刘煌   时间:2011-08-11   浏览次数:50     摘要:Web服务的有效负载包装在SOAP消息中,而SOAP消息体通过绑定服务调用方式封装操作,绑定编码方式序列化参数。然而,调

7496

Web Service (二) WSDL详解

  1.Web Service的一些相关概念 web service:远程调用的一种方案。一种解决跨平台、跨语言间的分布式系统的集成(整合)方案 esb:enterprise service bus企业服务总线 soap:simple object access protocal简单对象访问协议(http + xml) soa:service oriented acrchietectur...

xx510long的博客 1529

描述 Web 服务:WSDL

Web 服务描述语言(Web Services Description Language,WSDL)是一种基于 XML 的格式,它正在成为一种业界标准,用于以与实现无关的方式描述 Web 服务。将创建和使用 Web 服务的许多不同的方法结合起来,是一种常见的思路。本教程将让您牢固掌握 WSDL 的用途和机制,以及在使 Web 服务变得可互操作的工作中,它如何起到至关重要的作用。 本教程包括了

1914

WSDL[Web 服务描述语言]

SDL就是对Web服务软件的描述。具体来说,它描述所有公共可用的方法、交换方法、消息类型以及用在网络层的传输协议和Web服务的地址。客户端应用程序可以为使用的特定传输协议找到Web服务,以及调用任何公共方法。基本上,WSDL可以看作是服务提供者和服务请求者之间的契约。WSDL是XML格式的,所以它也具有平台无关性。WSDL和Java类似,因为它支持抽象和具体概念、以及接口。类似于Java,WS...

爱.NET 176

WSDL, SOAP and WS-I BP

WSDL - web service description language - 用XML语言描述一个服务的 Types, Message, Operation, Port Type, Binding, Port, Service - 其中Binding部分可以使用SOAP/HTTP SOAP - simple object access protocol - 用XML定义的消息

进步在于积累 992

WSDL样式详解

WSDL样式详解     WSDL样式详解 Web 服务是通过WSDL文档来描述的。WSDL绑定描述了如何把服务绑定到消息传递协议(特别是SOAP消息传递协议)。WSDL 的SOAP绑定style描述了服务调用方式,即远程过程调用rpc (Remote Procedure Call)方式或文档document方式。use定义了类型是编码encoded 方式还是文字literal方式

java爱分享 9611

golang 错误: cannot use XXX literal (type XXX) as type XXX in assignment:XXX does not implement XXX

出错代码如下: package main import ( "fmt" ) type Speaker interface { Hello() } type User struct { Name string Age int } func (this *User) Hello() { fmt.Println("hello my name is", t...

风格色的博客 2万+

转(对WebService "style" "use"消息格式的理解)

前段时间部署了几个WebService接口,发现XFire的services.xml文件有这么两标签,"style"和"use",很好奇他们有什么用处。就去找了些资料。资料不太好找,但基本还是搞清楚了。 简单地说style和use其实是WSDL声明服务是如何绑定到消息协议的。我们知道WSDL是用来描述服务接口的,也是用来告诉客户端该如何生成SOAP消息的。style和use不同,客户端生成的...

yangleiol的博客 296
上一篇: tomcat GZIP 压缩参数设置
下一篇: Java JDBC 连接 Oracle 三种方法
sun8288
博客等级 码龄22年 10粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值