SOAP简介

  绝对是今天最后一部分了,连看了三部 看容易 翻译累)

既然前边搞了Web Service 以及 WSDL 那最后一个SOAP也必须搞了,毕竟东西不多了。搞完了,估计自己就看明白了。:)

SOAP是一个连接WS的协议(简单的说)

必备知识是 XML 这个以后翻译 基础知识要打好 打好了再打打也没什么大碍

 

第一章 什么是SOAP

SOAP

1.  Simple Object Access Protocol

2.  通讯协议

3.  不同应用程序间的通讯协议

4.  信息发送格式

5.  设计为通过网络连信

6.  独立于平台的

7.  独立于语言的

8.  建立在XML基础上的

9.  简单且可扩展

10.              允许你越过防火墙

11.              W 3C 标准下开发的

为啥SOAP

SOAP允许程序间通信,所以对程序开发贼重要

如今我们用RPC远程程序通信,remote Procedure Calls, 比如DCOMCORBA.HTTP过去并不是为此而设计的。远程过程通信产生的问题时是兼容性和安全性。防火墙以及端口服务器一般来说会将这种传输封锁。

另外一种比较好的通信方法是通过HTTP。因为HTTP被所有网络浏览器级服务器所支持。SOAP也是为配合这一点所创建。

SOAP为运行在不同操作系统上的有不同技术和变成语言所写的应用程序提供了交流方式。

 

MSSOAP

SOAP属于MS.NET架构中为将来程序设计来说贼重要的一环。

SOAP 1.1 W 3C 所接受

20005月,老多牛x机构向W 3c 提交SOAP。他们希望SOAP协议通过使用HTTPXML的网络标准连接图形界面的桌面应用程序到牛x的网络服务器,以带来前无古人后无来者惊天地泣鬼神的应用程序发展进程中革命性的大大大变化。

W 3C 正在致力于SOAP1.2

第一个SOAP的工作草案被W 3C 公布于200112月。想知道更多就去看W 3C 的教程。W3C tutorial. 怎么这么多教程 还让不让人看完了

第二章 SOAP的语法

SOAP建立的板块

SOAP消息属于拥有以下成分的传统XML文档

1.  一个SOAP封装说明这是一个SOAP消息

2.  一个可选择的header标签

3.  一个Body部分包含呼叫和相应

4.  一个可选择的Fault部分用来描述可能出现的错误

所有以上的成员在下边这个网站有详细定义

http://www.w3.org/2001/12/soap-envelope 去看吧

所有的SOAP编码核数据类型定义可以去下边这个网址看

http://www.w3.org/2001/12/soap-encoding

 

一些重要的语法规则

一条SOAP消息必须

1.  XML编码

2.  SOAP 封装的

3.  SOAP编码

4.  不包含DTD参考资料

5.  不包含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">
<soap:Header>
  ...
  ...
</soap:Header>
<soap:Body>
  ...
  ...
  <soap:Fault>
    ...
    ...
  </soap:Fault>
</soap:Body>
</soap:Envelope>

 

 

第三章 SOAP封装成员

必需的SOAP封装成分是SOAP的最基本成员

SOAP封装成员

注意 xmlns:soap 的使用。 其值应该永远等于 http://www.w3.org/2001/12/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">
  ...
  Message information goes here
  ...
</soap:Envelope>

如果使用其他非如上的名称空间,程序就会出现错误并且丢掉这条消息

封装款式属性

SOAP封装款式属性用来在文档中所使用定义数据类型。这个属性可以出现在任何一个SOAP的成员中。而且他会对所在的成员内容以及子成员内容有效。 SOAP消息没有默认的封装格式。

soap:encodingStyle="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

 

第四章

SOAP头成员

可选的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:Header>
<m:Trans
xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
上边的实例包括了一个头成员,其中有3个组建,一个Trans,一个mustUnderstand属性值为1,还有一个值为234
在默认的命名空间中SOAP定义了三个属性。 这些属性为。
actor.
mustUnderstand
以及encodingStyle.
定义在头成员的这些属性定义了一个接收者如何处理SOAP消息。

  
  
   
    
  
  
actor属性
一个SOAP消息可能同过不同的节点从发送者到接收者。并不是所有的除了最终的节点,也许只有几个中途节点。(什么意思。。。)
SOAPactor属性也许用来标注头成员一个特别的结束点
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>

  
  
   
    
  
  
mustUnderstand 属性
mustUnderstand属性用来指出这个头成员是强制还是可选的被接收者所执行
如果你加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>
...
encodingStyle 属性在前边有所解释

  
  
   
    
  
  
第五章 SOAP Body成员
必需的SOAP body成员包括实际的SOAP消息
SOAP Body成员
必须的SOAP Body成分包括实际的SOAP消息用来表示消息的终止。
当下有效的SOAP Body成员必须是命名空间有效的。SOAP定义了一个有效的命名空间在Body中。http://www.w3.org/2001/12/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">
<soap:Body>
   <m:GetPrice xmlns:m="http://www.w3schools.com/prices">
      <m:Item>Apples</m:Item>
   </m:GetPrice>
</soap:Body>
</soap:Envelope>
这个例子获取苹果的价格。 Price apples. 注意 MGetPrice和成员组件属于应用程序指定的成分。这个不属于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>

  
  
   
    
  
  
第六章 
可选的SOAP容错成员用来保存SOAP消息的错误以及状态信息

  
  
   
    
  
  
SOAP 错误成员
SOAP的消息成员一般是包含在错误体的
如果错误成员被写,它必须写到Body体中。错误成员只能在SOAP的消息体中。
SOAP的错误成员有以下子成员:

<faultcode> 定义错误的代码

<faultstring>可阅读的错误定义

<faultactor> 错误的制造者

<detail>定义详细的错误信息

 

SOAP错误的代码

以下值必须在faultcode中使用

VersionMismatch 创建一个无效的命名空间

MustUnderstand 一个立即有效的头空间成员。如果原本属性为1

Client 这个消息是错误的生成的或者包括错的信息

Server 服务器错误所以消息不能被执行

第七章SOAP HTTP 绑定
HTTP协议
HTTP通过TCP/IP通信。一个HTTP客户用TCP连接一个HTTP服务器。 当连接建立后。客户可以向服务器发送HTTP请求。
POST /item HTTP/1.1
Host: 189.123.345.239
Content-Type: text/plain
Content-Length: 200
服务器处理这个请求然后回馈客户。回馈信息包括一些状态数据来说明请求的状态。
200 OK
Content-Type: text/plain
Content-Length: 200
如上例中 服务器返回了一个状态代码200。这是一个HTTP的标准成功代码。
如果服务器不能解锁请求,他会返回如下的一些信息。
400 Bad Request
Content-Length: 0

  
  
   
    
  
  
SOAP HTTP 绑定
一个SOAP的请求可以为一个包含SOAP加密规则的HTTP请求/回馈
HTTP+XML=SOAP
A SOAP请求可以为HTTP POST或者 HTTP GET请求
HTTP POST需要最少2HTTP的头部分描述。Content-TypeContent-Length
ContentType
Content-Type文件头定义了消息的MIME格式以及XML体的文字加密(可选)
格式

 

Content-Type: MIMEType; charset=character-encoding

例子

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Length

Conten-Length头指出了文件体大小

格式

Content-Length: bytes

例子

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

第八章

一个SOAP例子

在如下的示例中,一个GetStockPrice请求发送到了服务器。 这个请求有一个StockName 参数,一个Price参数会作为相应被返回。这些命名空间在http://www.example.org/stock被定义。

SOAP请求

POST /InStock HTTP/1.1
Host: www.example.org
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>

A SOAP 反馈:

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>

总结

你都学会了吧,不会从看去或者看原文去。累死我咧。回头看看XML有没有可翻译性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值