`
KingZha
  • 浏览: 12279 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Web Service理论-SOAP

阅读更多
转载自:http://www.blogjava.net/zpuser/archive/2008/07/04/212593.html

什么是WebServcie

    网上有很多解释版本。我是技术研发,所以个人理解从技术角度说:Web Service是一种轻量级别的基于XML的跨平台远程服务通讯框架技术,可以很好解决各平台和语言间的数据通讯。

语意协议:使用基于XML的SOAP协议,定义业务数据格式。
传输协议:使用HTTP,TPC/IP,FTP,SMTP和JMS等,一般采用和支持较多的是HTTP。
接口描述语言:使用基于XML的WDSL作为统一服务描述。
简单的说,WEBSERVICE就是规定一系列的规范和框架,提供一个基于SOA(面向服务的架构)概念的使用WSDL来描述服务接口定义的方案,可以使用传统的传输协议(一般使用HTTP)传输基于XML的SOAP格式报文数据来实现跨平台间系统的通讯。下面分别介绍WEBSERVICE中必须了解的几个部分:SOAP,WSDL和传输协议

SOAP

简单对象访问协议(SOAP:Simple Object Access Protocol)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。主要负责在WEBSERVICE服务中通讯报文数据格式的定义。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME),传统SOCKET通讯(TCP/IP),JAVA消息系统(JMS)等传输协议。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

 SOAP 包括三个部分:
SOAP 封装:它定义了一个框架,该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。
SOAP 编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。
SOAP RPC 表示:它定义了用于表示远程过程调用和应答的协定。
  SOAP 消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求 / 应答的模式。所有的 SOAP 消息都使用 XML 编码。一条 SOAP 消息就是一个包含有一个必需的 SOAP 的封装包,一个可选的 SOAP 标头和一个必需的 SOAP 体块的 XML 文档。

  把 SOAP 绑定到 HTTP 提供了同时利用 SOAP 的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的优点。在 HTTP 上传送 SOAP 并不是说 SOAP 会覆盖现有的 HTTP 语义,而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。简单的说就是,通过HTTP POST(当然也可以GET或其它,一般是POST)方式传输一个SOAP协议定义的报文数据体,用于双向通讯。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定,也可以和其他的现行传输协议绑定。

语法规则

SOAP 消息必须用 XML 来编码
SOAP 消息必须使用 SOAP Envelope 命名空间
SOAP 消息必须使用 SOAP Encoding 命名空间
SOAP 消息不能包含 DTD 引用
SOAP 消息不能包含 XML 处理指令
SOAP报文结构

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

必需的 Envelope标签,文档的ROOT,可把此 XML 文档标识为一条 SOAP 消息
必需的 SOAP 的 Envelope 元素是 SOAP 消息的根元素。它可把 XML 文档定义为 SOAP 消息

可选的 Header标签,包含头部信息
可选的 SOAP Header 元素可包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)。如果 Header 元素被提供,则它必须是 Envelope 元素的第一个子元素。


必需的 Body标签,包含所有的调用和响应信息

必需的 SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。

SOAP Body 元素的直接子元素可以是合格的命名空间。SOAP 在默认的命名空间中("http://www.w3.org/2001/12/soap-envelope")定义了 Body 元素内部的一个元素。即 SOAP 的 Fault 元素,用于指示错误消息。

可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

来自 SOAP 消息的错误消息被携带于 Fault 元素内部。

如果已提供了 Fault 元素,则它必须是 Body 元素的子元素。在一条 SOAP 消息中,Fault 元素只能出现一次。

SOAP 的 Fault 元素用于下列子元素:

子元素 描述
<faultcode> 供识别故障的代码
<faultstring> 可供人阅读的有关故障的说明
<faultactor> 有关是谁引发故障的信息
<detail> 存留涉及 Body 元素的应用程序专用错误信息


SOAP请求报文
<!-- 信封 -->
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" //SOAP报文默认命名空间
                   xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" //编码数据类型命名空间
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//文档XSD实例方案,规定格式
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema">         //文档XSD方案,规定格式
    <!-- 信头 -->
    <SOAP-ENV:HEADER></SOAP-ENV:HEADER>
    <!-- 信体 -->
    <SOAP-ENV:Body>
        <m:activateEpurse xmlns:m="http://service.payment.ipayment.justinmobile.com">
            <m:appNo>String</m:appNo>
            <m:mobileNo>String</m:mobileNo>
        </m:activateEpurse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP应答报文(返回一个entry数组,也就是MAP)
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        <ns1:activateEpurseResponse xmlns:ns1="http://service.payment.ipayment.justinmobile.com">
            <ns1:out>
                <entry xmlns="http://service.payment.ipayment.justinmobile.com">
                    <key>transStatus</key>
                    <value>0001</value>
                </entry>
            </ns1:out>
        </ns1:activateEpurseResponse>
    </soap:Body>
</soap:Envelope>


所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中:

http://www.w3.org/2001/12/soap-envelope
SOAP 在默认的命名空间中 ("http://www.w3.org/2001/12/soap-envelope") 定义了三个属性。这三个属性是:actor、 mustUnderstand 以及 encodingStyle。这些被定义在 SOAP 头部的属性可定义容器如何对 SOAP 消息进行处理。

actor
通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。并非 SOAP 消息的所有部分均打算传送到 SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。

SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点。

soap:actor="URI"

mustUnderstand
SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。

假如您向 Header 元素的某个子元素添加了 "mustUnderstand="1",则它可指示处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效。

soap:mustUnderstand="0|1"

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

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




以及针对 SOAP 编码和数据类型的默认命名空间:

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

转载自:http://www.blogjava.net/zpuser/archive/2008/07/04/212593.html
分享到:
评论

相关推荐

    REST+理论与实践.ppt

    基于SOAP的Web Service 通过标准SOAP协议通讯,一般走HTTP通道 能够跨平台调用 通讯格式是xml文本,而不是二进制数据格式 通过RPC机制来实现分布式调用,而不是通过面向对象机制实现分布式调用

    基于SOAP和Axis2的Web服务设计与实现

    Web Service作为SOA(Service Oriented Architecture)的最好实现...介绍了Web服务框架以及支撑Web服务的WSDL、SOAP、Axis2和JUDDI等相关理论知识,通过设计与实现一个例子来阐述Web服务创建、发布、查找和调用的整个过程.

    Web Services With Perl

    这是本很有用的书,描述了网络服务基本理论及SOAP概念,例举了很多用各种perl module构建网络服务的源代码,比如非常常用的SOAP::Lite, XML-RPC等。

    值类型与引用类型理论内容.part01.rar

    详细地讲授Web Service及其应用和相关的安全性问题、WSE(Web Services Enhancements)、SOAP、WSDL、UDDI、Windows Service、VSS(Visual Source Safe)。讲授用户控件和第三方控件的开发和使用。学习HTML、XML、...

    值类型与引用类型理论内容.part05.rar

    详细地讲授Web Service及其应用和相关的安全性问题、WSE(Web Services Enhancements)、SOAP、WSDL、UDDI、Windows Service、VSS(Visual Source Safe)。讲授用户控件和第三方控件的开发和使用。学习HTML、XML、...

    ofbiz综合技术文档

    1、MVC理论描述 5 2、系统设计 6 3、OFBiz中MVC模式体现 7 二、JPublish合成表示层 8 1、经典的合成器--JPublish 8 2、template + script 9 3、JPublish和MVC 9 三、区块(Region)指南 9 1、简介 9 2、定义区块 10 ...

    ZendFramework中文文档

    5.2. 操作理论 5.3. Zend_Config_Ini 5.4. Zend_Config_Xml 6. Zend_Console_Getopt 6.1. Getopt 简介 6.2. 声明 Getopt 规则 6.2.1. 用短语法声明选项 6.2.2. 用长语法声明选项 6.3. 读取(Fetching)选项...

    超级有影响力霸气的Java面试题大全文档

     Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    详解用Node.js实现Restful风格webservice

    Restful风格的WebService正在渐渐取代传统的SOAP, Java 也有很多Restful的框架,很方便简洁,Jersey,restlet,甚至SpringMVC也可以,不得不说Rest让人从Web转型到WebService更容易和方便,当然深入Restful的理论...

    java 面试题 总结

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    Spring.net框架

    既然类之间的依赖导致耦合过于紧密,按照《设计模式》的理论,我们要依赖于接口。但是人们往往发现,仅仅依赖于接口似乎并不能完全解决问题。我们从上面的例子中抽象出接口后,组件间的依赖关系可能变成如下图所示:...

    系统分析师考试复习资料

    11 SOAP......................................................................................................................12 Web Service技术(SOAP、UDDI、WSDL、EBXML)..........................

Global site tag (gtag.js) - Google Analytics