WebServices详解
来源:互联网 发布:linux mint 18怎么样 编辑:程序博客网 时间:2024/05/05 14:45
WebServices简介
先给出一个概念 SOA ,即Service Oriented Architecture,中文一般理解为面向服务的架构,既然说是一种架构的话,所以一般认为SOA是包含了运行环境,编程模型,架构风格和相关方法论等在内的一整套新的分布式软件系统构造方法和环境,
涵盖服务的整个生命周期。而在SOA的架构风格中,服务是最核心的抽象手段。
SOA 中的服务是构建在一些列基于开放标准的基础之上的,
Web 服务定义了如何在异构系统之间实现通信的标准化方法,
从而就使得 Web 服务可以跨越运行平台和实现语言,
同时也使得 Web 服务成为了实现 SOA 中服务的主要技术。
至于SOA 的话,太高深的技术,这里不予讨论(嘿嘿),本篇博文只介绍 WebServices这项技术。
引子
有没有一种办法可以实现跨应用程序进行通信和跨平台进行通信呢?
换句话说,就是有什么办法可以实现我的应用程序 A可以和应用程序 B 进行通信呢?或者说是,我用 Java写的应用程序和用 . Net开发的应用程序之间进行通信呢?很多时候,上面提到的这些,我们是必须要使用的,比如,一个跨应用程序吧,
拿腾讯 QQ 来说吧,我估计每一个人都用过腾讯QQ上面的天气预报工具吧 !!!
上面的这个天气预报功能是如何实现的呢?
有一种办法,那就是腾讯公司放个卫星上天,并且在公司中成立一个气象部门,天天关注于天气,然后每时每刻更新腾讯 QQ上的这个天气预报信息,
确实,这种办法确实行得通,不过,要真这样做的话,估计马化腾也该被踢出去了(哪有这么蠢啊?),那么上面这个是如何实现的呢?别急,且听我慢慢道来~~~
然后,我们再来看看跨平台这个东东又是什么呢?这里主要是拿 .Net平台和Java 平台来说明例子,假若,有两个公司,每个公司呢都有自己的一个项目,一个公司呢使用 . Net开发,一个呢,使用 Java开发,
恩,本来呢,这两个是相互独立的,进水不犯河水,但是有一天,突然,这两个公司给合并了,合并后的老总发现,如果把两个项目结合起来将会大大的赚一笔,为此,如何做?因为要把两个项目结合在一起,那么这两个项目之间总应该通通信吧 !!!可这两个项目又是基于不同的平台,怎么通信呢?麻烦了吧 !!!
而后再看一种情况,就是比如一个公司使用的服务器是 Windows Server 2008,
那么它如何和 IT 供应商的UNIX 或者是 Linux服务器进行连接呢?也很复杂吧 !!!
WebServices到底是什么?
如果简单的说的话,WebServices就是一组函数库,不过这和我们平时概念中的函数库却又有所不同,我们平时所使用的函数库要么是自己写的(在自己的应用程序当中写一组函数库),要么是调用底层的 API(操作系统 API如Win32 API),上面的这两种情况有一个共同点,那就是函数库是位于客户端本地的,比如,您调用Win32 API的话,就是调用本地操作系统上的函数库,而这里提到 Web 服务也是一组函数库这个概念和上面提到的函数库这个概念的区别就在此处,因为 Web服务看做一组函数库的话,那么这组函数库不是位于本地的,而是位于远程机器上(当然也可以是本地机器中)。
何为 Web 服务?
也就是网络服务,那就是把网络上不知道那个地方的一些函数看做是一组服务,然后我再通过网络就可以使用这些服务。
关于什么是 Web 服务,上面的说法那是山寨版的,稍微正经一点的说法是:
Web 服务是一种部署在 Web 上的对象或者是应用程序组件。
Why WebServices?
为什么需要使用 WebServices呢?这必须根据WebServices的特点以及其优势进行分析了。
首先,上面呢,也说了,Web服务的话,就是一组网络上的应用程序组件,
这样的话,您便可以通过在您的应用程序中使用 Web服务来将您的应用程序提升到服务层面上来。既然可以看做是一组服务了的话,那么当然就是可以提供给别个(别的应用程序)使用咯。比如,我可以通过 Web服务来公开一些接口给别个使用,至于这些要不要收费呢?那就看我心情了,前面举了腾讯 QQ上查询天气的例子,这个例子呢,就可以在这里来做一个解释了,在中国,应该只有一个卫星来进行天气预报的吧?腾讯也不可能为了天气预报而专门放个卫星上天吧?可是腾讯 QQ又确实是可以查询天气的,这里,便可以通过 Web服务来解决。首先,中国气象局应该是有一个卫星的,气象局根据卫星所返回的结果实时发布全国各地的天气状况,并且将这些天气信息以 Web服务的形式公开,然后呢,腾讯 QQ便可以通过这个 Web服务来访问到天气状况了,再将这些天气状况反馈到 QQ上就 OK 了。然后,上面提到了 Web服务是应用程序组件,既然是组件,那么就可以对这个组件重复的进行使用了,同时可以通过 Web 服务来实现将这个应用程序组件作为一个服务来进行使用,更为强大的是,可以将多个 WebServices组合成为更为强大的WebServices,并且是通过互联网哦!!!这也是一大优点啊,然后呢,最基本的 WebServices是基于 XML和 HTTP 的(当然这是最基本的WebServices,比如 WebServices还可以通过 HTTPS或者是 SMTP 来实现通信),这又有什好处呢?很明显,XML和HTTP 这些都已经是标准了,不论你是 Java平台呢,还是 . Net平台开发出来的(或者是是使用 Web服务),既然我是使用 XML和 HTTP 的话,我才懒得鸟你什么 Java 还是 . Net 呢,我也不管你是 Linux还是Windows ,这一切都和我 Web 服务无关,我关注的只是通过 HTTP协议来传输 XML 就 OK 了,至于这些 XML是如何被服务提供者开发出来的或者这些 XML是如何被服务请求者使用的,这些都和我无关,这里便可以看出 Web服务的另一个优势了,那就是跨语言跨平台(实现协同工作),所以可以通过 Web服务来实现不同应用程序和不同平台之间的通信。Web服务允许独立于实现服务基于的硬件或者是软件平台和编写服务所用的编程语言使用服务,
根据上面这两点呢,
便可以解决掉最开始提出的使用 Java开发的应用程序如何和使用 . Net开发的应用程序之间进行通信这一问题,
同时,也可以解决 Linux 或者是UNIX 和 Windows Server 2008之间进行连接这一问题了。
最后就是通过使用不同的 Web服务,也不管 Web 服务是那种编程语言实现的,
我们都可以从不同的平台和操作系统进行访问,从而大大提高了不同应用程序共享数据和应用的能力。并且 Web服务提供了构建 SOA所必须得技术基础。
从上面可以看出通过WebServices解决了我们曾经想都不敢想的问题,这么强大的东西为什么不加以好好利用呢?
WebServices体系结构
在Web 服务的体系结构中,涉及到三个角色,
一个是 Web 服务提供者,一个是 Web服务中介者,还有一个就是Web服务请求者,
同时还涉及到三类动作,即发布,查找,绑定,
Web 服务提供者:
可以发布 Web 服务,并且对使用自身服务的请求进行响应,
Web 服务的拥有者,它会等待其他的服务或者是应用程序访问自己。
Web 服务请求者:
也就是 Web 服务功能的使用者,它通过服务注册中心也就是 Web服务中介者查找到所需要的服务,
再利用 SOAP 消息向 Web服务提供者发送请求以获得服务。
Web 服务中介者:
也称为服务代理,用来注册已经发布的 Web服务提供者,并对其进行分类,同时提供搜索服务,
简单来说的话,Web 服务中介者的作用就是把一个 Web服务请求者和合适的Web服务提供者联系在一起,
充当一个管理者的角色,一般是通过UDDI来实现。
发布:
通过发布操作,可以使 Web服务提供者向Web服务中介者注册自己的功能以及访问的接口。
发现(查找):
使得 Web 服务请求者可以通过 Web服务中介者来查找到特点的种类的Web服务。
绑定:
这里就是实现让服务请求者能够使用服务提供者提供的服务了。
WebServices三种基本元素之 SOAP
SOAP 即 Simple Object AccessProtocol 也就是简单对象访问协议。
SOAP 呢,其指导理念是“唯一一个没有发明任何新技术的技术”,
是一种用于访问 Web 服务的协议。
因为 SOAP 基于XML 和 HTTP,其通过XML 来实现消息描述,然后再通过 HTTP实现消息传输。
SOAP 是用于在应用程序之间进行通信的一种通信协议。
因为是基于 XML 和HTTP 的,所以其独立于语言,独立于平台,并且因为 XML的扩展性很好,
所以基于 XML 的 SOAP 自然扩展性也不差。
通过 SOAP 可以非常方便的解决互联网中消息互联互通的需求,
其和其他的 Web 服务协议构建起 SOA 应用的技术基础。
SOAP 协议的一个重要特点是它独立于底层传输机制,Web服务应用程序可以根据需要选择自己的数据传输协议,
可以在发送消息时来确定相应传输机制。
由于 HTTP 协议本身的一些特点和局限性,
使得当 SOAP 使用HTTP 绑定的 Web服务并不能满足某些企业应用的需求。
比如,HTTP 不是一个可靠传输协议,所以有可能在传输过程中出现问题,
然后 HTTP 协议基于Request/Response模型,也就是说客户端需要在等待响应消息接收完成后才能继续执行,
而此时如果响应时间过长呢?
基于上面的这些需求,便需要选择合适的传输协议了。
关于这方面的内容的话,有点深奥了,有兴趣的可以去看看 IBM的一些关于这方面内容的介绍。
还有一点需要提及一下,那就是 SOAP是可以绕过防火墙的,将来将会作为 W3C的标准进行发展。
WebServices三种基本元素之 WSDL
WSDL 即Web Services DescriptionLanguage也就是 Web服务描述语言。
是基于 XML的用于描述 Web服务以及如何访问 Web服务的语言。
服务提供者通过服务描述将所有用于访问 Web服务的规范传送给服务请求者,
要实现 Web服务体系结构的松散耦合,服务描述是一个关键,
不管是请求者还是服务提供者,通过服务描述便可以不必了解对方的底层平台,编程语言等,
服务描述与底层的SOAP 基础结构相结合,
足以封装服务请求者的应用程序和服务提供者的 Web服务之间的这个细节。
WSDL 描述了 Web服务的三个基本属性:
(1)服务所提供的操作
(2)如何访问服务
(3)服务位于何处(通过URL来确定就 OK 了)
WebServices三种基本元素之 UDDI
UDDI 即 Universal Description,Discovery and Integration,也就是通用的描述,发现以及整合。
WSDL 呢,用来描述了访问特定的 Web服务的一些相关的信息,可以在互联网上,
或者是在企业的不同部门之间,如何来发现我们所需要的 Web服务呢?
而 Web 服务提供商又如何将自己开发的 Web服务公布到因特网上,
这就需要使用到 UDDI 了,UDDI的话,是一个跨产业,跨平台的开放性架构,
可以帮助 Web 服务提供商在互联网上发布 Web 服务的信息。
UDDI 呢是一种目录服务,企业可以通过 UDDI来注册和搜索 Web 服务。
简单来时候话,UDDI 就是一个目录,只不过在这个目录中存放的是一些关于 Web服务的信息而已。
并且 UDDI 通过SOAP 进行通讯,构建于 . Net之上。
开发 Web服务的方式
(1)开发阶段:
实现一个 Web服务,使这个Web 服务能响应和接收 SOAP 消息,
(这个呢,其实可以通过Visual Studio来帮助实现),
定义好逻辑模块(这个Web服务总要干点事情吧),
然后再撰写 WSDL文件(这个呢,开发工具会自动生成的,不需要人工撰写了)
(2)部署阶段:
指定 Web服务的传输协议,将Web服务注册到相应服务描述部署文件(这些也是可以由工具来自动完成的)
(3)发布阶段:
将 Web服务的接口和调用的地址公开给客户端调用,
常用的发布方式为基于Web提供的WSDL 的链接,当然 UDDI 也是一个选择。
- WebServices详解
- WebServices
- WebServices
- webservices
- WebServices
- WebServices
- Webservices
- WebServices
- WebServices
- WEBSERVICES
- webservices
- WebServices入门
- WebServices入门
- WebServices入门
- WebServices入门
- WebServices入门
- WebServices字典
- WebServices资源
- Linux<文件管理----硬链接和软链接>
- JAVA设计模式(二十一)——状态模式
- 第二章 类型、变量和表达式
- linux系统发布项目【操作步骤】
- PHP基础
- WebServices详解
- python读取文件时遇到非法字符的处理 UnicodeDecodeError: 'gbk' codec can't decode bytes in position
- 丢弃重口味的xml配置--spring4用groovy配置bean
- 面向对象设计原则:依赖倒置原则(The Dependency Inversion Principle)
- java之final的各种用法(续)
- 基本Kmeans算法介绍及其实现
- js操作unity模型旋转
- 2014134019仝菲菲
- Unity3D游戏开发之从Unity3D到Eclipse