SOAP
1.什么是SOAP?
答:简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML的协议,
它被设计成在WEB上交换结构化的和固化的信息。
WebService的三要素
SOAP、WSDL、UDDI:SOAP是用来描述传递信息的格式。WSDL用来描述如何访问具体的接口。
UDDI用来管理,分发,查询WebService。
SOAP可以和现存的许多因特网协议和格式结合使用,保护超文本传输协议(HTTP),简单的邮件传输协议(SMTP),
多用途网际邮件扩充协议(MIME)。
2.SOAP的语法:
1.SOAP构建模块
一条SOAP消息是一个普通XML文档包含些列元素
必须的Envolope元素,可把此XML文档标识为一条SOAP消息
可选的Header元素,包含头部信息
必选的Body元素,包含所有调用和响应的信息
可选的Fault元素,提供有关在此处理消息所发生的错误信息;
2.SOAP语法规则:
SOAP消息必须用XML来编码
SOAP消息必须使用SOAP Envelope命名空间
SOAP消息必须使用SOAP Encoding命名空间
SOAP消息不包括DTD引用
SOAP消息不能包括XML处理指令
3.SOAP消息的基本结构
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
3.SOAP Envelope 元素
强制使用的SOAP的Envelope元素是SOAP消息的根元素。
1.SOAP Envelope 元素
必须的SOAP 的Envelope元素是SOAP消息的根元素。它可把XML文档定义为SOAP消息。
实例:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
xmlns:soap命名空间:
SOAP消息必须拥有与命名空间“http://www.w3.org/2001/12/soap-envelope”相关联
的一个Envelope元素。
如果使用了不同的命名空间,应用程序会发生错误,并抛弃此消息。
encodeingStyle属性:
SOAP的encodeingStyle属性用于定义在文档中使用的数据类型。此属性可出现在
任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。
SOAP消息没有默认的编码方式。
语法:soap:encodeingStyle="URI"
实例:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
4.SOAP Header元素
可选的SOAP Header 元素包含头部信息。
1.SOAP Header 元素
可选的SOAP Header元素可包含有关SOAP消息的应用程序专用信息(比如认证,支付等)。
如何Header元素被提供,则它必须是Envelope元素的第一个子元素。
注意:所有的Header元素的直接子元素必须是合格的命名空间。
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
上面的例子包含一个带有一个“Trans”元素的头部,它的值是234,此元素的“mustUnderstand”属性值是“1”。
SOAPA在默认的命名空间中("http://www.w3.org/2001/12/soap-envelope")定义了三个属性。
这三个属性是:actor、mustUnderstand以及encodingStyle,这些被定义在 SOAP头部属性可定义容器如何对SOAP消息
进行处理。
2.mustUnderstand属性
SOAP的mustUnderstand属性可用于标识标题对于要进行处理的接收者来说是强制的还是可选的。
假如您向Header元素中的某个子元素添加了mustUnderstand=1 ,则它可指示处理此头部的接收者必须认可此元素。
假如次接收者无法认可此元素,则在处理此头部时必须失效。
语法:soap:mustUnderstand="0|1"
实例:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
3.actor 属性
通过沿着消息路径经过不同的端点,SOAP消息可从某个发送者传播到某个接收者。并非SOAP消息
的所有部分均打算传送到SOAP的最终端点,不过,另一方面,也许打算传送给消息路径上的一个或多个端点。
SOAP的actor 属性可被用于将Header元素寻址到一个特定的端点。
语法:
soap:actor="URI"
实例:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:actor="http://www.w3schools.com/appml/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
5.SOAP Body 元素
强制使用的SOAP Body元素包含实际的SOAP消息。
1.SOAP Body 元素
必须的SOAP Body 元素可包含打算传送到消息最终端点的实际SOAP消息。
SOAP Body 元素的直接子元素是合格的命名空间。
实例:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
<m:GetPrice xmlns:m="http://www.w3schools.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>

</soap:Envelope>
上面的例子请求苹果的价格。请注意,上面的m:GetPrice 和 Item 元素是应用程序专有的元素。它们并不是
SOAP标准的一部分。
而一个SOAP响应应该类似这样:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>

</soap:Envelope>
6.SOAP Fault 元素
SOAP Fault元素用于存留SOAP消息的错误和状态信息。
1.SOAP Fault 元素
可选的SOAP Fault 元素用指示错误消息。
如果已提供了Fault元素,则它必须是Body元素的子元素。在一条SOAP消息中,Fault元素只能出现一次。
SOAP的Fault元素拥有以下子元素:
<faultcode> 供识别故障的代码
<faultstring> 可供人阅读有关故障的说明
<faultactor> 有关是谁引发故障的信息
<detail> 存留涉及Body元素应用程序专用错误信息
2.SOAP Fault 代码
在下面定义的faultcode值必须用于描述错误时的faultcode元素中:
VersionMismatch SOAP Envelope元素的无效的命名空间被发现
MustUnderstand Header 元素的一个子元素无法被理解
Client 消息被不正确的构成,或包含了不正确的信息
Server 服务器有问题,因此无法处理进行下去
7.SOAP HTTP 协议
1.HTTP 协议
HTTP在TCP/IP之上通信。HTTP客户机使用TCP连接到HTTP服务器。在建立连接之后,客户机可向
服务器发送HTTP请求消息:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
服务器会处理此请求,然后向客户机发送一个HTTP响应。此响应包含了指示请求状态的代码:
200 OK
Content-Type: text/plain
Content-Length: 200
在上面的例子中,服务器返回了一个200的状态代码。这是HTTP的标准成功代码。
假如服务器无法对请求进行解码,它可能会返回类似这样的信息:
400 Bad Request
Content-Length: 0
2.SOAP HTTP Binding
SOAP方法指的是遵守SOAP编码规则的HTTP请求/响应。
1.HTTP+XML=SOAP
SOAP请求可能是HTTP POST 或 HTTP GET 请求。
HTTP POST请求规则规定至少两个HTTP头:Content-Type 和 Content-Length。
2.Content-Type
SOAP的请求和响应的Content-Type头可以定义消息的MIME类型。以及用于请求或响应的
XML主题的字符编码(可选)。
语法:Content-Type:MIMEType;charset=character-encoding
实例:
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
3.Content-Length
SOAP的请求和响应的Content-Length头规定请求或响应主体的字节数。
语法:Content-Length:bytes
实例:
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

SOAP介绍,为学习WCF做准备的更多相关文章

  1. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  2. 学习WCF之——wcf程序的创建

    这是我参考的主要资料——wcf学习之旅:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 首先,如博客上介绍的一样,创建空白的项 ...

  3. [转]学习 WCF (6)--学习调用WCF服务的各种方法

    转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...

  4. Android应用程序的Activity启动过程简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6685853 在Android系统中,Activ ...

  5. Android应用程序组件Content Provider简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...

  6. Android窗口管理服务WindowManagerService的简要介绍和学习计划

    在前一个系列文章中,我们从个体的角度来分析了Android应用程序窗口的实现框架.事实上,如果我们从整体的角度来看,Android应用程序窗口的 实现要更复杂,因为它们的类型和作用不同,且会相互影响. ...

  7. Android应用程序窗口(Activity)实现框架简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8170307 前面我们学习了SurfaceFli ...

  8. 学习WCF之路,长期更新

    我学习WCF之路:创建一个简单的WCF程序   为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本 ...

  9. [转]Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    转自:Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划 前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了Surfa ...

随机推荐

  1. git配置本地环境(phpstudy/tortoisegit/git等)

    1.下载安装phpstudy 2.下载安装git 下载地址:https://git-scm.com/downloads 3.下载安装tortoisegit,电脑64位就下载这个,如图: 4.下载安装“ ...

  2. C语言中静态断言的使用

    编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作异常处理的高级形式,用于代码调试. #define _CRT_SECURE_NO_WARNINGS //关闭安全监察 ...

  3. Ajaxa的原生使用方法

    Ajax整合了JavaScript.xml.CSS等现有技术而成,全称为Asynchronous JavaScript And XML,即异步的 JavaScript和xml.它使用了JavaScri ...

  4. SDUT OJ 数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Desc ...

  5. 把display 属性改为block样式变化问题

    可能的值 值 描述 none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素,元素前后没有换行符. inline-blo ...

  6. 带权并查集 - How Many Answers Are Wrong

    思路: 带权并查集+向量偏移 #include <iostream> using namespace std; int n, m; ]; ]; // 到根节点的距离 ; void init ...

  7. java基础_01

    一.java中的数据类型 1.基本数据类型:四类八种 byte(1),boolean(1),short(2),char(2),int(4),float(4),long(8),double(8); 2. ...

  8. Exadata 18.1新特性--计算节点升级增强

    新的计算节点升级增强能大幅缩短升级花费的时间,最快能减少40%的时间,具体的增强主要体现在以下方面: 1.计算节点操作系统的备份工作. 以前计算节点操作系统的备份工作是在正式升级之前执行,在滚动升级过 ...

  9. Qt 学习之路 2(59):使用流处理 XML

    Qt 学习之路 2(59):使用流处理 XML 豆子 2013年7月25日 Qt 学习之路 2 18条评论 本章开始我们将了解到如何使用 Qt 处理 XML 格式的文档. XML(eXtensible ...

  10. [Beta阶段]第一次Scrum Meeting

    Scrum Meeting博客目录 [Beta阶段]第一次Scrum Meeting 基本信息 名称 时间 地点 时长 第一次Scrum Meeting 19/04/29 大运村寝室6楼 70min ...