SOAP学习笔记

一、 SOAP简介

1. 什么是SOAP

ü 简单对象访问协议

ü 一种通讯协议

ü 用于应用程序之间通讯

ü 独立于平台

ü 独立于语言

ü 基于XML

ü 简单,易扩展

ü 允许绕过防火墙

2. SOAP不能做什么

² 分布式碎片收集

² 成批消息传送

² 对象引用

² 激活机制

二、 SOAP语法

1. SOAP构建模块

一个SOAP消息包含以下元素

ü 必须的Envelope元素,标识此文档为SOAP消息

ü 可选的Header元素,包含头部消息

ü 必选的Body元素,包含调用和响应消息

ü 可选的Fault元素,提供处理过程中的错误消息。

2. SOAP语法规则

ü 必须用XML来编码

ü 必须用SOAP Envelope命名空间

ü 必须用SOAP Encoding命名空间

ü 不能包含DTD引用?

ü 不能包含XML处理指令 ?

3. SOAP消息基本结构

<?xml version=”1.0”?>

<soap:Envolope

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:Envolope>

三、 SOAP Envelope元素

1. SOAP Envelope元素

强制使用的Envelope元素是SOAP消息的根元素,它可以把XML文档定义为SOAP消息

xmlns:soap的值必须是http://www.w3.org/2001/12/soap-envelope

<?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:Envelope>

2. xmlns:soap命名空间

3. encodingStyle元素

encodingStyle元素用于定义文档中使用的数据类型,此属性可以出现在任意的SOAP元素中,并会被应用到该元素及所有子元素上。SOAP消息没有默认编码格式。

四、 SOAP Header元素

1. SOAP Header元素

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.msbai.com/transactions” mustUnderstand=”1”>234</m:Trans>

</soap:Header>

……

</soap:Envelope>

SOAP在默认的命名空间(http://www.w3.org/2001/12/soap-envelope)中,定义了三个属性(attribute),分别是:mustUnderstandactorencodingStyle

2. actor属性

沿着消息路径经过不同的端点,SOAP消息可以从某个发送者传播到某个接收者。

并非SOAP消息的所有部分都会传送到SOAP消息的最终端点,另一方面,SOAP消息可以传递给消息路径上的一个或者多个端点。

SOAPactor属性可以用于将Header元素寻址到一个特定的端点?

todo ..

3. mustUnderstand属性

SOAPmustUnderstand属性可以用来标识元素对于接收者来说是强制的还是可选的。

如果想Header元素的某个子元素添加了mustUnderstand=”1”,则指示处理此头部的接收者必须认可此元素,否则必须失效。

1) 语法

soap:mustUnderstand=”0|1”

2) 示例

4. encodingSytle属性

上节已讲

五、 SOAP Body元素

1. SOAP Body元素

SOAP Body元素的直接子元素可以是合格的命名空间。(?)SOAP的默认命名空间中,定义了Body元素内部的一个元素。及SOAPFault元素,用于指示错误信息。

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:GetPrice xmlns:m=”http://www.msbai.com/price”>

<m:Item>apple</m:Item>

</m:GetPrice>

</soap:Body>

</soap:Envelope>

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">

<m:GetPriceResponse xmlns:m=”http://www.msbai.com/price”>

<m:Price>1.90</m:Price>

</m:GetPriceResponse>

</soap:Envelope>

六、 SOAP Fault元素

可选的SOAP Fault元素用来保存SOAP消息的错误和状态信息。

1. SOAP Fault元素

Fault元素必须是Body元素的子元素,只能出现一次。

SOAPFault元素有下列子元素

<faultcode> 供识别故障的代码

<faultstring> 错误说明

<faultactor> 错误引发者 ?

<detail> 明细,保存应用程序的专用错误信息。

2. SOAP Fault Codes

VersionMismatch SOAP Envelope元素的无效命名空间被发现

MustUnderstand Header元素的某个直接子元素,设置了mustUnderstand属性,但是无法被理解

Client 客户端上行数据包错误,消息没有被正确的构成,或者包含了不正确的信息。

Server 服务器错误

七、 SOAP HTTP Binding

1. HTTP协议

2. HTTP + XML = SOAP

SOAP请求可能是POST请求,也可能是GET请求

POST请求规定至少包含两个HTTP请求头:Content-TypeContent-Length

POST /item HTTP/1.1

Content-Type: application/soap+xml; charset=utf-8

Content-length:nnn

八、 SOAP实例

请求:

POST /InStock HTTP/1.1

Content-Type: application/soap+xml; charset=utf-8

Content-Length: nnn

<?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 xmlns:m="http://www.example.org/stock">

<m:GetStockPrice>

<m:StockName>IBM</m:StockName>

</m:GetStockPrice>

</soap:Body>

</soap:Envelope>

响应:

HTTP/1.1 200 OK

Content-Type: application/soap+xml; charset=utf-8

Content-Length: nnn

<?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 xmlns:m="http://www.example.org/stock">

<m:GetStockPriceResponse>

<m:Price>34.5</m:Price>

</m:GetStockPriceResponse>

</soap:Body>

</soap:Envelope>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值