Web Services之SOAP

[toc]

什么是SOAP

SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。

SOAP 协议包括以下四个部分:

  1.SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;
  2.SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例;
  3.SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;
  4.SOAP绑定(binding),使用底层协议交换信息。

SOAP的传输协议使用的就是HTTP协议。只不过HTTP传输的内容是HTML文本,而SOAP协议传输的是SOAP的数据。

语法规则

  1.SOAP 消息必须用 XML 来编码;
  2.SOAP 消息必须使用 SOAP Envelope 命名空间;
  3.SOAP 消息必须使用 SOAP Encoding 命名空间;
  4.SOAP 消息不能包含 DTD 引用;
  5.SOAP 消息不能包含 XML 处理指令;

SOAP消息结构

一条 SOAP 消息就是一个普通的 XML 文档,包含如下元素:
  1 必需的 Envelope 元素,据此可把该 XML 文档标识为一条 SOAP 消息;
  2 可选的 Header 元素,包含头部信息,一般用于身份验证;
  3 必需的 Body 元素,包含所有的调用和响应信息;
  4 可选的 Fault 元素,提供有关在处理此消息时,所发生的错误的描述信息;

一条 SOAP 消息的基本格式:

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Header> <!-- 消息头,可选 --> </soap:Header> <soap:Body> <!-- 消息内容,必需 --> <soap:Fault> <!-- 错误信息,可选 --> </soap:Fault> </soap:Body> </soap:Envelope>

语法详解

SOAP Envelope

Envelope 是 SOAP 消息结构的主要容器,也是 SOAP 消息的根元素,它必须出现在每个 SOAP 消息中,用于把此 XML 文档标示为一条 SOAP 消息。
在 SOAP 中,使用命名空间将 SOAP 消息元素与应用程序自定义的元素区分开来,将 SOAP 消息元素的作用域限制在一个特定的区域。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> </soap:Envelope>
SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。

SOAP Header

这个是可选的,如果需要添加 Header 元素,那么它必须是 Envelope 的第一个子元素。Header 还可以包含0个或多个可选的子元素,这些子元素称为 Header 项,所有的 Header 项一般来说是属于某个特定与接口相关的命名空间。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Header> <AuthenHeader xmlns="http://www.example.com"> <sAuthenticate>string</sAuthenticate> </AuthenHeader> </soap:Header> <soap:Body> </soap:Body> </soap:Envelope>
Header 元素用于与消息一起传输一些附加的消息,如身份验证信息等。

SOAP Body

SOAP 消息的 Body 元素可以包含以下任何元素:
1 远程过程调用(RPC)的方法及其参数;
2 目标应用程序(消息接收者即接口调用者)所需要的数据;
3 报告故障和状态消息的 SOAP Fault;
所有 Body 元素的直接子元素都称为 Body 项,所有 Body 项一般是属于某个特点的命名空间的。
SOAP 请求消息例子:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <getMobileCodeInfo xmlns="http://www.example.com"> <mobileCode>string</mobileCode> <userID>string</userID> </getMobileCodeInfo> </soap:Body> </soap:Envelope>
SOAP 响应消息例子:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Body> <getMobileCodeInfoResponse xmlns="http://www.example.com"> <getMobileCodeInfoResult>string</getMobileCodeInfoResult> </getMobileCodeInfoResponse> </soap:Body> </soap:Envelope>
注:以上例子表示通过手机号获取手机号归属地等信息。第一个例子是请求消息,第二个例子是它的响应消息。

SOAP Fault

位于Body内,可选,提供有关处理此消息所发生错误的信息。

参考

SOAP 介绍
IBM

Web Services之SOAP学习的更多相关文章

  1. Web Services使用SOAP Header

    在Web Services方法进行通信使用SOAP遵循标准的SOAP格式,该格式的一部分是在XML文档中编码的数据.XML文档包含一个Envelope根元素(由必需的Body元素和可选的Header元 ...

  2. SOAP Binding: Difference between Document and RPC Style Web Services

    SOAP Binding: Difference between Document and RPC Style Web Services 20FLARES Twitter 1Facebook 9Goo ...

  3. Web Services 指南之:Web Services 综述

    在本系列指南中.我们学习了怎样使用 Web Services.可是一个 web service 还包含可以使它活跃的组件.诸如 WSDL.UDDI 以及 SOAP.接下来我们了解一下 WSDL.UDD ...

  4. Delphi 6 Web Services初步评估之三(转)

    Delphi 6 Web Services初步评估之三(转)   Delphi 6 Web Services初步评估之三(转)★ 测试总体印象:在整个测试中,对Delphi 6创建的Web Servi ...

  5. web services + soap + wsdl 学习

    什么是web services? 应用程序组件: 使用开放协议进行通信: 独立(self - contained )并可自我描述: 可通过使用UDDI来发现: 可被其他应用程序使用: XML是Web ...

  6. 基于soap 的 python web services 服务开发指南

    文章大纲 序言 相关概念 SOA web services SOAP WSDL UDDI 环境搭建 我们使用 python 3.6 这个较新python 版本 服务端开发 客户端开发 suds-jur ...

  7. Web Services 中XML、SOAP和WSDL的一些必要知识

    Web Services 是由xml来定义数据格式的,通过SOAP协议在各个系统平台中传输,那么接下来讨论下SOAP和WSDL的各自作用. SOAP和WSDL对Web Service.WCF进行深入了 ...

  8. 使用LoadRunner对Web Services进行调用--Import Soap

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  9. Web Services的相关名词解释:WSDL与SOAP

    在对Web Services进行性能测试时,接触到最多的两个名词就是WSDL和SOAP.利用LoadRunner对Web Services进行调用的时候,也存在两种常用方法,即基于WSDL的[Add ...

随机推荐

  1. -_-#【CSS 优化】

    高性能CSS 关于css通配符性能问题不完全测试 CSS的渲染效率 border: none; /* 不写 border: 0; 但几乎都是写 border: 0;的.. */ 不要使用过小的图片做背 ...

  2. Android 中HttpClient和HttpURLConnection选取

    原文地址:http://android-developers.blogspot.com/2011/09/androids-http-clients.html 译文:http://yunfeng.sin ...

  3. (转载)一句简单命令重启nginx - [nginx]

    (转载)http://iambin.blogbus.com/logs/62429223.html 经常需要重启nginx,但网上的很多教程都需要繁琐的启动脚本,远不如apache的重启命令那么简单.  ...

  4. 一步步写STM32 OS【二】环境搭建

    一.安装IAR for ARM6.5 二.新建工程 1.选择处理器:STM32F407VG,暂不使用FPU 2.必要的路径配置和宏定义 3.使用SWO重定向IO输出 4.使用ST-LINK仿真器 5. ...

  5. Visual Studio 2010打开水晶报表是出现二进制

    水晶报表在64位的机器下未安装成功 解决方法 到http://www.cnblogs.com/siyunianhua/p/4806513.html下载  水晶报表VS2010版IDE安装标准版SAP ...

  6. C程序设计 习题之1-20 detab

    码农一定是最需要动手实操的行业之一.有一句话叫,好记性不如烂笔头,牵强附会引申到这里,变成看书百遍,不如码字运行一遍.是不是有那么一点味道?哈哈! 这几天看的<C程序设计>,看完每个章节还 ...

  7. 合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数 (转)

    转自: http://www.cnblogs.com/aolin/archive/2011/04/12/2014122.html 示例表 tb 数据如下 id value—————1 aa1 bb2 ...

  8. java.lang.RuntimeException: java.lang.ClassNotFoundException: cmd.CmdWordCount$MyMapper解决方法

    14/02/28 20:29:48 INFO mapred.JobClient: Task Id : attempt_201402281833_0004_m_000000_1, Status : FA ...

  9. 判断html中的滚动条

    在工作中需要调整jqgrid的列宽,但是不希望有横向滚动条,因为是固定的列宽,当显示区域缩小后,数据会出现竖型滚动条 这个时候需要判断竖型滚动条是否存在进行列宽的调整. 自己调查了一下,发现滚动条可以 ...

  10. redis的hash, list, set类型相关命令

    hash相关命令: 1. hset HSET key field value 将哈希表key中的域field的值设为value.如果key不存在,一个新的哈希表被创建并进行hset操作.如果域fiel ...