SOAP介绍,为学习WCF做准备
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做准备的更多相关文章
- 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代码方式来 ...
- 学习WCF之——wcf程序的创建
这是我参考的主要资料——wcf学习之旅:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 首先,如博客上介绍的一样,创建空白的项 ...
- [转]学习 WCF (6)--学习调用WCF服务的各种方法
转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...
- Android应用程序的Activity启动过程简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6685853 在Android系统中,Activ ...
- Android应用程序组件Content Provider简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...
- Android窗口管理服务WindowManagerService的简要介绍和学习计划
在前一个系列文章中,我们从个体的角度来分析了Android应用程序窗口的实现框架.事实上,如果我们从整体的角度来看,Android应用程序窗口的 实现要更复杂,因为它们的类型和作用不同,且会相互影响. ...
- Android应用程序窗口(Activity)实现框架简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8170307 前面我们学习了SurfaceFli ...
- 学习WCF之路,长期更新
我学习WCF之路:创建一个简单的WCF程序 为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本 ...
- [转]Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
转自:Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划 前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了Surfa ...
随机推荐
- HttpClient 基于连接池的使用
场景:调用外部系统接口的http请求 要求: 1:可能是http请求,也可能是https请求 2:需要加入连接池的概念,不能每次发起请求都新建一个连接(每次连接握手三次,效率太低) 准备使用httpc ...
- 6.HMM
- Python中实现简单的插件框架
在系统设计中,经常我们希望设计一套插件机制,在不修改程序主体情况下,动态去加载附能. 我设想的插件系统: 1.通过类来实现 2.自动查找和导入 我们假设需要实现一个简单的插件系统,插件可以接收一个参数 ...
- Liunux疑问
Liunux疑问 其中的各种软件的安装有模糊的点,待解决 待解决 待解决 待解决 ... ...
- 【离散数学】 SDUT OJ 建图
建图 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 编程使得程序可以接受一个图的点边 ...
- 搭建Jenkins--(用于个人学习持续集成)
###1.安装java 完成后输入java -version,出现版本信息 输入 javac, 会出现 说明,JDK 和 JRE 安装正确 ###2.安装tomcat 1.下载Tomcat wind ...
- phpstorm利用database连接mysql数据库
首先声明一点,database只能连接一个已存在的数据库,不能创建数据库 连接一个已存在的数据库步骤: 1,找到database:连续点击俩次shift,输入database就能找到了 2,点击绿色的 ...
- bzoj1004 [HNOI2008]Cards Burnside定理+背包
题目传送门 思路:首先是Burnside引理,要先学会这个博客. Burnside引理我们总结一下,就是 每种置换下不动点的数量之和除以置换的总数,得到染色方案的数量. 这道题,显然每种 ...
- 简单的html渲染模板引擎
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 2.3 if switch for等流程控制
if条件中可以写多个语句,语句的作用域仅限于if,不可在if之外的地方使用 package main import ( "fmt" "io/ioutil" ) ...