热门文章
阿标在线 动力3.62HTML生成3.62网站文件说明
动力3.62整合动网7.0 SP2插
MDAC2.8 下载!
动力3.62版 防止垃圾留言
动力3.6全方位改动方法
让3.62不同频道实现不同风
把3.62首页登陆为横向代码
动易3.6首页随机FLASH修改
362首页和文章频道页图文幻
个性化修改3.6宝典
3.62轻易实现网摘功能
如何正确统计中文字数?
弹出JAVASCRIPT语法错误对
后台使“网站顶部LOGO地址
最新图片文章横向移动的修
html 生成艺术字
3.6 Sp2 Logo和Banner及广
日期值的计算
汉字转拼音
首页“图片更新”图片滚动
简体中文转换为繁体中文的
如何在css中定义链接的下划
Web Service随笔1
[ 录入:阿标 | 点击数: | 更新时间:2005-2-3 17:39:00]
Web Service随笔。
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的名字保留了,但是它并不代表任何东西。