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

转载于:https://www.cnblogs.com/bj-xiaoma/p/6994018.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值