Web Service随笔
http://blog.csdn.net/shaily/archive/2009/02/28/3945126.aspx
1 为什么出现Web Service?
现在Internet的发展十分迅速,它从前的框架是“人来获取网络上的资源,比如:程序、文档等”。也就是说,现在的Web是以人为中心的,人来发送各种请求。而它的发展趋势将是主体从“人”转向“程序”,比如媒体播放器、浏览器等,也就是说“以应用程序中心”的Web。其实,在Web Service出现之前,人们就已经在做这方面的事情了,例如Java的Servlet和CGI,但是不同的程序系统采用了不同的数据定义,所以这些系统之间的交互变得异常地复杂。Web Service的出现,就是为了解决了不同应用程序之间通信的格式问题。
2 Web Service的通信方式?
XML通信有几种不同的方法,例如:XML Remote Procedure Calls (XML-RPC),SOAP或HTTP GET/POST。
3 Web Service的属性。
Web Service是在Internet上任何可用的服务,它是通过标准化的XML通信(XML Messaging)来实现的,并且不依赖于任何平台和任何编程语言。
尽管不是必须的,但Web Service可能会有其他两个属性:
A)可自描述的(self-describing).如果你编写Web Service,你应该发布Web Service的公共接口,至少有一个基于自然语言的文档。这样,别的开发者才能轻松地整合你的服务。
B)可发现的(discoverable).其他和你的Web Service有关的程序(可能是分散的,也可能是集中的系统)能够找到它。
4 Web Service 的架构
Web Service有两种架构,一种是讨论Web Service每个功能角色(role),另一种是讨论Web Service的协议层(protocol stack)。
就前者而言,Web Service有三个角色:服务提供者,服务请求者和服务注册机构。服务请求者从服务注册机构获得服务提供者,然后向服务提供者发出提供服务的请求。
就后者而言,Web Service有四层:服务传输层(Service transport)、XML通信层(XML messaging)、服务描述层(Service description)和服务发现层(Service discovery)。
A) 服务传输层:负责信息在应用程序之间的传送。现在包括HTTP、FTP、SMTP和较新的如BEEP等协议。
就现在而言,由于HTTP比较简单、稳定以及被广泛应用,而且大部分防火墙对HTTP协议的80端口是开放的,所以HTTP是服务运输层的最流行的协议。当然它会有一些安全上的隐患,因为HTTP协议的设计并不能满足Web Service的安全性。
SOAP是不依赖于具体协议的,除了HTTP协议,它还可以通过FTP、SMTP等传输,比较有前途的是BEEP(Blocks Extensible Exchange Protocol)协议。BEEP协议属于TCP,它较HTTP的优势在于:除了TCP公共的握手外,它每次所带的报文头只需30个字节。
B) XML通信层:负责用通用的XML格式对信息进行编码。现在包括XML-RPC和 SOAP.
C) 服务描述层:负责用WSDL将公共接口向特定的Web Service描述。
D) 服务发现层:负责将服务集中到公共注册机构,并且提供Web Service发布和寻找功能,现在服务发现是通过UDDI来实现的(Universal Description, Discovery, and Integration
)。
可见,Web Service采用可类似网络分层的结构,使各个层次的功能互补干扰,同时又能很好的互相合作。当然,随着Web Service的不断发展,可能会出现新的层次。
我们可以看一下IBM的演示:
http://awwebx04.alphaworks.ibm.com/ettk/demos/wstkdoc/README.htm
我到微软注册了UDDI:http://uddi.microsoft.com
接下来看一下XML请求
下面是一段JAVA的SOAP调用:
Soap Request:
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getWeather
xmlns:ns1="urn:examples:weatherservice"
SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding/">
<zipcode xsi:type="xsd:string">10016</zipcode>
</ns1:getWeather>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP Response:
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2001/09/soap-envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getWeatherResponse
xmlns:ns1="urn:examples:weatherservice"
SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding/">
<return xsi:type="xsd:int">65</return>
</ns1:getWeatherResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
而下面是.Net调用的SOAP
Soap Request:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http://tempuri.org/">
<a>24</a>
<b>12</b>
</Add>
</soap:Body>
</soap:Envelope>
SOAP Response:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddResponse xmlns="http://tempuri.org/">
<AddResult>36</AddResult>
</AddResponse>
</soap:Body>
</soap:Envelope>
可以看出Xml通信的确是与平台、语言无关的一种方式。
WSDL:我认为说白了,就是一个应用程序的一个公共接口,回想我们调用一个Web Service的时候,我们事先知道它的方法、参数和返回值,但是具体如何实现,我们并不关心,这不就是我们通常所说的接口吗?
所以WSDL就是一种XML格式的Web Service提供的公共接口。
UDDI:
UDDI的数据有三种:
A) 白页。公司的基本信息
B) 黄页。服务的基本信息
C) 绿页。服务的技术信息,调用服务的地址。
4 什么是SOAP?
用W3C的话说,它什么也不是。它并没有被W3C正式承认。甚至连SOAP 1.1也只是Note的地位,意思是现在它在被W3C成员讨论。
SOAP原意是简单对象进入协议(Simple Object Access Protocol),但是W3C对这个名字不太满意,因为这个解释没有表达清楚,但他们又不想换个名字,因为SOAP已经被开发者们熟悉并使用。所以,出现了奇怪的现象,SOAP的名字保留了,但是它并不代表任何东西。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaily/archive/2009/02/28/3945126.aspx