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. 查看服务器的ip地址

    因测试需要查看服务器的ip地址,故进行搜索. 1.(操作成功的方法)在浏览器输入www.ip.cn,可查询出ip地址: 2.(说明书的操作方法,但我未能查询到ip地址)在浏览器输入http://ip. ...

  2. c++11时间相关库(chrono)

    以下整理自:https://www.2cto.com/kf/201404/290706.html chrono 库主要包含了三种类型:时间间隔 Duration.时钟 Clocks 和时间点 Time ...

  3. HDU6336-2018ACM暑假多校联合训练4-1005-Problem E. Matrix from Arrays-前缀和

    题意是给了一种矩阵的生成方式 让你求两个左边之间的矩阵里面的数加起来的和(不是求矩阵的值) 没看标程之前硬撸写了160行 用了前缀和以后代码量缩短到原来的1/3 根据规律可以推导出这个矩阵是在不断重复 ...

  4. JS编程模式之初始化分支与惰性初始

    不同的浏览器对于相同或相似的方法可能有不同的实现.这时,您需要依据当前的浏览器的支持方法来选择对应的执行分支.这类分支有可能与很多,因此可能会减缓脚本的执行速度.但非要等到运行时才能分支吗?我们完全可 ...

  5. UML之类图详解

    原文链接:https://www.cnblogs.com/xsyblogs/p/3404202.html 我们通过一个示例来了解UML类图的基本语法结构.画UML类图其实有专业的工具,像常用的Visi ...

  6. 【hadoop】 eclipse中的“run on hadoop”和打包成jar提交任务的区别

    eclipse中的 调试运行 及 “run on hadoop”默认只是运行在单机上的,因为要想在集群中让程序分布式运行还要经历上传类文件.分发到各个节点等过程, 一个简单的“run on hadoo ...

  7. Python正则表达式匹配日期与时间

    #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Randy' import re from datetime import da ...

  8. 条目八《永不建立auto_ptr的容器》

    条目八<永不建立auto_ptr的容器> 重要的事说三次,永不建立auto_ptr的容器,永不建立auto_ptr的容器,永不建立auto_ptr的容器!!! 为什么? 实质是auto_p ...

  9. OC语法

    ``` int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSString *S= ...

  10. 洛谷 P3380 【模板】二逼平衡树(树套树)

    题面 luogu 题解 2019年AC的第一道题~~ 函数名命名为rank竟然会ce 我写的是树状数组套值域线段树(动态开点) 操作1:询问\(k\)在\([l-r]\)这段区间有多少数比它小,再加\ ...