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. windows server2008虚拟机系统盘扩容

    windows server2008虚拟机的系统盘空间过小,对系统盘进行扩容,操作如下: 1.将虚拟机关机: 2.VMware对该虚拟机进行设置,选中磁盘,点击扩容,输入扩容大小,等待扩容完成: 3. ...

  2. node创建一个简单的web服务

    本文将如何用node创建一个简单的web服务,过程也很简单呢~ 开始之前要先安装node.js 1.创建一个最简单的服务 // server.js const http = require('http ...

  3. linux vmalloc和kmalloc

    kmalloc是内核低端内存的分配,而vmalloc对应内核高端内存的分配.kmalloc()分配的内存处于3GB-high_memory之间,这一段内核空间与物理内存的映射. kmalloc保证分配 ...

  4. ArcGIS10.4破解

    arcgis 10.4破解方法 *注意!Desktop,Engine,Server必须为同一版本* Engine10.4破解失败,SDE10.4未进行破解 1.先安装License10.4 2.再安装 ...

  5. 洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome

    嗯... 这道题对于蒟蒻的我来说实在是TQL... 先看一下题:(题目链接:https://www.luogu.org/problemnew/show/P1217) 然后说一下我的做题过程吧: 一看到 ...

  6. AC自动机例题

    P3808 [模板]AC自动机(简单版) [题目描述] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. #include<bits/stdc++.h> using name ...

  7. Subsequence(二分)

    A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...

  8. HDU - 3949 线性基应用

    题意:求第\(k\)小的异或和 要点: 1.线性基能表示原数组的任意异或和,但不包括0,需特判(flag) 2.线性基中的异或组合只有\(2^{|B|}-1\)个,如果可以异或为0,则组合数为\(2^ ...

  9. HTML5本地存储和本地的数据库

    一个网站如何能在客户的浏览器存储更多的数据呢? 在Html4的时代在浏览器端存储点网站个性化的数据,尤其是用户浏览器的痕迹,用户的相关数据等一般只能存储在Cookie中,但是大多是浏览器对于Cooki ...

  10. poj1002 字典树+map+查询单词出现次数

    487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 309235   Accepted: 55223 Descr ...