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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值