深入理解Web Service

SOA和Web Service

首先明白SOA和Web Service的关系:

* SOA面向服务架构,用于大型分布式系统的一个概念;

* Web Service是实现SOA的方式之一,不是所有的SOA都是基于Web service的;

* 但Webservice确实为最主流的SOA实现方式,有的人甚至把SOA等同于Webservice。不可否认,正是Webservice的成功才造就了SOA这个概念的成功;

Webservice

Webservice有三个基础标准:

1.WSDL: Web服务定义语言(Web Service Definition Language),用来定义服务接口。实际上,它能描述服务的两个不同方面:服务的签名(名字和参数),以及服务的绑定和部署细节(协议和位置)。

2.SOAP:简单对象访问协议(Simple Object Access Protocol),是定义Webservice的协议。HTTP是一个网络数据交互的底层协议,而SOAP是Web Service数据交换的专用协议。

3.UDDI:通用描述、发现与集成服务(Universal Description, Discovery and Integration),UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。

SOAP是协议,就像HTTP协议一样,一般框架都已经集成;

UDDI扮演者补充的角色,非必须,而且通常在实践中也不用。

WSDL是开发人员打交道最多的东西,也算是Webservice的核心了。

WSDL

WSDL现在主要有两个版本,1.1和2.0,两个版本标示大体结构相似,略有不同。(WSDL1.1版本根节点为definitions,2.0版本根节点为description)

WSDL Example

WSDL通常是框架来生成的,并不是手工写的,比如Java可以使用wsgen生成webservice,.Net框架也有自己方法,都可以通过自身的框架把接口发布称WSDL文件。
一个WSDL的简单示例。这个WSDL文件定义了一个被称为CustomerService的服务,该服务提供了一个被称为getCustomerAdress()的操作。这个操作的输入参数为一个类型为long的客户ID,输出为一个包含3个string属性-街道、城市和邮编的结构。(示例来自于《SOA实践指南》)

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <definitions name="CustomerService"
 3      targetNamespace="http://soa-in-practice.com/wsdl"
 4      xmlns:tns="http://soa-in-practice.com/wsdl"
 5      xmlns:xsd1="http://soa-in-practice.com/xsd"
 6      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 7      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 8      xmlns="http://schemas.xmlsoap.org/wsdl/">
 9
10      <types>
11           <xsd:schema
12                targetNamespace="http://soa-in-practice.com/xsd"
13                xmlns="http://soa-in-practice.com/xsd">
14
15                <xsd:element name="getCustomerAddress">
16                     <xsd:complexType>
17                          <xsd:sequence>
18                               <xsd:element name="customerID" type="xsd:long"/>
19                          </xsd:sequence>
20                     </xsd:complexType>
21                </xsd:element>
22
23                <xsd:element name="getCustomerAddressResponse" type="Address"/>
24                <xsd:complexType name="Address">
25                     <xsd:sequence>
26                          <xsd:element name="street" type="xsd:string"/>
27                          <xsd:element name="city" type="xsd:string"/>
28                          <xsd:element name="zipCode" type="xsd:string"/>
29                     </xsd:sequence>
30                </xsd:complexType>
31
32           </xsd:schema>
33      </types>
34
35      <message name="getCustomerAddressInput">
36           <part name="params" element="xsd1:getCustomerAddress"/>
37      </message>
38      <message name="getCustomerAddressOutput">
39           <part name="params" element="xsd1:getCustomerAddressResponse"/>
40      </message>
41
42      <portType name="CustomerInterface" >
43           <operation name="getCustomerAddress">
44                <input message="tns:getCustomerAddressInput" />
45                <output message="tns:getCustomerAddressOutput" />
46           </operation>
47      </portType>
48
49      <binding name="CustomerSOAPBinding"
50           type="tns:CustomerInterface" >
51           <soap:binding style="document"
52           transport="http://schemas.xmlsoap.org/soap/http" />
53           <operation name="getCustomerAddress">
54                <soap:operation
55                soapAction="http://soa-in-practice.com/getCustomerAddress" />
56                <input>
57                     <soap:body use="literal" />
58                </input>
59                <output>
60                     <soap:body use="literal" />
61                </output>
62           </operation>
63      </binding>
64
65      <service name="CustomerService" >
66           <port name="CustomerPort"
67                binding="tns:CustomerSOAPBinding">
68                <soap:address
69                location="http://soa-in-practice.com/customer11"/>
70           </port>
71      </service>
72
73 </definitions>  

WSDL文件的解读

阅读一个WSDL,需要从下往上看

最后的<service>节点定义了这个服务的名称为CustomerService,并且该服务可以在http://soa-in-practice.com/customer11找到。

<service name="CustomerService" >
          <port name="CustomerPort"
               binding="tns:CustomerSOAPBinding">
               <soap:address
               location="http://soa-in-practice.com/customer11"/>
          </port>
     </service>

<binding>节点定义了用来提供Webservice的协议和格式。CustomerSOABiding是Binding的名称,并指出Binding要从哪个接口开始(这里是从CustomerInterface这个接口开始)

<binding name="CustomerSOAPBinding"
          type="tns:CustomerInterface" >
          <soap:binding style="document"
          transport="http://schemas.xmlsoap.org/soap/http" />
          <operation name="getCustomerAddress">
               <soap:operation
               soapAction="http://soa-in-practice.com/getCustomerAddress" />
               <input>
                    <soap:body use="literal" />
               </input>
               <output>
                    <soap:body use="literal" />
               </output>
          </operation>
     </binding>

<portType>描述了CustomerInterface这个接口,其中接口包含一个叫getCustomerAddress的Operation。在Operation下边,getCustomerAddressInput和getCustomerAddressOutput是这个Operation的输入消息和输出消息。

<portType name="CustomerInterface" >
          <operation name="getCustomerAddress">
               <input message="tns:getCustomerAddressInput" />
               <output message="tns:getCustomerAddressOutput" />
          </operation>
     </portType>

<message>节点定义了各个消息,使用的是<portType>节点引用的标识符。

<message name="getCustomerAddressInput">
          <part name="params" element="xsd1:getCustomerAddress"/>
     </message>
     <message name="getCustomerAddressOutput">
          <part name="params" element="xsd1:getCustomerAddressResponse"/>
     </message>

<type>节点定义了将会使用到的数据类型:输入参数customerID的类型为long,输出参数address的类型是有3个字符串属性的结构/记录。所有类型在自己的命名空间xsd1中。

<types>
          <xsd:schema
               targetNamespace="http://soa-in-practice.com/xsd"
               xmlns="http://soa-in-practice.com/xsd">

<xsd:element name="getCustomerAddress">
                    <xsd:complexType>
                         <xsd:sequence>
                              <xsd:element name="customerID" type="xsd:long"/>
                         </xsd:sequence>
                    </xsd:complexType>
               </xsd:element>

<xsd:element name="getCustomerAddressResponse" type="Address"/>
               <xsd:complexType name="Address">
                    <xsd:sequence>
                         <xsd:element name="street" type="xsd:string"/>
                         <xsd:element name="city" type="xsd:string"/>
                         <xsd:element name="zipCode" type="xsd:string"/>
                    </xsd:sequence>
               </xsd:complexType>

</xsd:schema>
     </types>

SOAP

SOAP (Simple Object Access Protocol)是一个消息框架,这个消息框架是基于XML协议的,从下图能够看到,SOAP的框架非常像HTTP协议,都包含的消息的Header和消息的Body,只不过SOAP是Web Service数据交换的专用协议。SOAP是HTTP的上层协议,最终还是通过HTTP来传输数据。

时间: 2024-10-11 05:14:28

深入理解Web Service的相关文章

转:Web service是什么?

作者: 阮一峰 我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web service到底是什么? 一.Web service的概念 想要理解Web service,必须先理解什么是Service(服务). 传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service).比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控

Web service是什么?

http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html 我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web service到底是什么? 一.Web service的概念 想要理解Web service,必须先理解什么是Service(服务). 传统上,我们把计算机后台程序(Daemon)提供的功能,称为&

Web service是什么?(转)

我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web service到底是什么? 一.Web service的概念 想要理解Web service,必须先理解什么是Service(服务). 传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service).比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个&quo

(转)白痴理解的SOAP/Web Service/WSDL关系

以前也曾经写过简单的WebService,但是并没有深入的研究,这两天看了园子里的一些文章,又请教了身边的高人,把SOAP.Web Service和WSDL的关系大概搞明白了,举例说明如下: X局有两个副局长A和B,A副局长分管财务,B副局长分管计划生育,但是A副局长是上海人,B副局长是 广东人,两个人又都只会说自己家乡的方言,不会说普通话,这让下面的工作人员在请示汇报的时候非常困难,为了解决这个问题,局里的科员小c发明了一个表 格,表格列出了需要向局长请示的问题以及说明这个问题所需要的数据等等

【Java】对Web Service的理解

WSDL(Web Service Description Language)是描述Web Service的语言. 你会怎样向别人介绍你的Web service有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Web service的人.这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Web servic

Web Service和WCF的到底有什么区别

[1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.  

Web Service概念梳理

计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些早期介绍Web Service的书为准.如有错误,欢迎指正! -------------------------------------------------------------- 提前预警!概念太多,你需要仔细阅读,或要阅读两遍.   SOA                        

.NET基础拾遗(7)Web Service的开发与应用基础

Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基础 (7)WebService的开发与应用基础 一.SOAP和Web Service的基本概念 Web Service基于SOAP协议,而SOAP本身符合XML语法规范.虽然.NET为Web Service提供了强大的支持,但了解其基本机制对于程序员来说仍然是必需的. 1.1 神马是SOAP协议?

Android Web Service学习总结(一)

最近学习android平台调用webWebService,学习了一篇不错的博客(http://blog.csdn.net/lyq8479/article/details/6428288),可惜是2011年时的方法,而不适合现在android4.0之后的android版本,所以通过一番学习和研究,总结如下. web Service简介 通俗的理解:通过使用WebService,我们能够像调用本地方法一样去调用远程服务器上的方法.我们并不需要关心远程的那个方法是Java写的,还是PHP或C#写的:我