• 简单了解webservice


    webservice是什么

    WebService是一种跨编程语言、跨操作系统平台的远程调用技术。

    • 远程调用技术:远程调用是指一台设备上的程序A可以调用另一台设备上的方法B。
    • 跨编程语言:是指服务端、客户端程序的编程语言可以不同。
    • 跨操作系统平台:是指服务端、客户端可在不同的操作系统上运行。

    Web服务定义了如何在异构系统之间实现通信的标准化方法,从而就使得 Web 服务可以跨越运行平台和实现语言,同时也使得 Web 服务成为了实现SOA(面向服务的架构)中服务的主要技术。
    WebServices提供一个建立分布式应用的平台,使得运行在不同操作系统和不同设备上的软件,或者是用不同的程序语言和不同厂商的软件开发工具开发的软件,所有可能的已开发和部署的软件,能够利用这一平台实现分布式计算的目的。
    从表面上看,WebService是指一个应用程序向外界暴露了一个能通过Web调用的API接口,我们把调用这个WebService的应用程序称作客户端,把提供这个WebService的应用程序称作服务端。
    从深层上看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何通过Web实现互操作性,通过WebService标准对服务进行查询和访问。
    WebServices的思想是:使得应用程序也具有Web分布式编程模型的松散耦合性。

    何为远程调用

    远程调用的过程是这样的
    先从客户端和服务端的角度考虑,客户端向服务端发送服务请求,服务端接收请求并处理,再向客户端回复请求,客户端接收回复。
    从请求本身的角度考虑,请求和回复各自表现为一组数据,数据具有某种表示形式(XML)和类型标准(XSD),数据通过传输协议(HTTP)进行网络传输。客户端进行服务的远程调用前,需要知道服务的地址与服务有什么方法可以调用。
    因此,WebService服务端通过一个文件(WSDL)来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
    WSDL(Web Services Description Language)是一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。WSDL 文件保存在Web服务器上,通过一个url地址就可以访问到它。
    客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

    WebServices的特点:

    (1)WebServices 是自包含的。即在客户端不需要附加任何软件,只要客户机支持HTTP和XML就可以了。

    (2)WebServices 是自我描述的。在客户端和服务端都不需要知道除了请求和响应消息的格式和内容外的任何东西。

    (3)WebServices 是跨平台和跨语言的。客户端和服务端均可以在不同的平台和语言环境中实现,同时,不必为了支持WebServices而更改现有的代码。

    (4)WebServices 是基于开放和标准的。XML和HTTP是WebServices 的主要技术基础,而 XML和HTTP早就成了业内标准了。

    (5)WebServices 是动态的。

    (6)WebServices 是可以组合的。也就是通过一个WebService访问另外一个WebService来达到组合的目的。通过组合WebServices便可以将简单的WebServices聚合成为实现更多复杂功能的复杂的服务。

    (7)WebServices 是松散耦合的。它完全解耦了客户端和服务端。

    (8)WebServices 提供编程访问的能力。换句话说,就是可以通过编写程序来访问Web服务。

    (9)WebServices 是基于经过考验的成熟技术上构建的。比如XML和HTTP。

    (10)WebServices 提供打包现有应用程序的能力。

    (11)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三种基本元素之WSDL(WSDL,UDDI,SOAP)

    WSDL 即Web Services Description Language也就是 Web 服务描述语言。是基于XML的用于描述Web服务以及如何访问Web服务的语言。服务提供者通过服务描述将所有用于访问Web服务的规范传送给服务请求者,要实现Web服务体系结构的松散耦合,服务描述是一个关键,不管是请求者还是服务提供者,通过服务描述便可以不必了解对方的底层平台,编程语言等。

    WSDL描述了Web服务的三个基本属性:

    (1)服务所提供的操作
    (2)如何访问服务
    (3)服务位于何处(通过URL地址来确定就可以)

    WebServices三种基本元素之UDDI

    UDDI即 Universal Description,Discovery and Integration,也就是通用的描述,发现以及整合。
    UDDI是一个跨产业,跨平台的开放性架构,可以帮助 Web 服务提供商在互联网上发布 Web 服务的信息。也是一种目录服务,企业可以通过UDDI来注册和搜索Web服务。简单来说,UDDI就是一个目录,只不过在这个目录中存放的是一些关于Web服务的信息而已。并且UDDI通过SOAP进行通讯,构建于.Net之上。 UDDI是一种规范,它主要提供基于Web服务的注册和发现机制,为Web服务提供三个重要的技术支持:
    ①标准、透明、专门描述Web服务的机制;②调用Web服务的机制;③可以访问的Web服务注册中心。通俗来说就是用来管理,分发,查询webService。

    WebServices三种基本元素之SOAP

    描述传递信息的格式,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。soap协议是使用http作为传输协议,xml作为数据结构的。

    下图是一个soap的简单示例

    WebService平台技术

    XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。

    XML+XSD

      WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关 的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。
      XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这 些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就 是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所 有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。

    SOAP

    WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明 HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。

    SOAP协议 = HTTP协议 + XML数据格式

    SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比 喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

    WSDL

      好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方 法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
      WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都 能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。

      WSDL 文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。 WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

    WebService开发

      WebService开发可以分为服务器端开发和客户端开发两个方面

    服务端开发

      把公司内部系统的业务方法发布成WebService服务,供远程合作单位和个人调用。(借助一些WebService框架可以很轻松地把自己的业务对象发布成WebService服务,Java方面的典型WebService框架包括:axis,xfire,cxf 等,java ee服务器通常也支持发布WebService服务,例如JBoss。)

    客户端开发

      调用别人发布的WebService服务,大多数人从事的开发都属于这个方面,例如,调用天气预报WebService服务。(使用厂 商的WSDL2Java之类的工具生成静态调用的代理类代码;使用厂商提供的客户端编程API类;使用SUN公司早期标准的jax-rpc开发包;使用 SUN公司最新标准的jax-ws开发包。当然SUN已被ORACLE收购)

    WebService 的工作调用原理

    对客户端而言,我们给这各类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,我调用这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap数据变成返回值返回。对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成soap格式的数据,通过http响应消息回给客户端。

    参考博文:
    (1) https://www.cnblogs.com/xdp-gacl/p/4048937.html
    (2) https://blog.csdn.net/hhooong/article/details/51763128

  • 相关阅读:
    【C++注意事项】1 数据类型及类型转换
    【万里征程——Windows App开发】动态磁贴
    背包问题
    Fence Repair
    Saruman's Army
    字典序最小问题——Best Cow Line
    区间调度问题
    硬币问题
    数据库查询优化的一些总结
    关于减少BUG的思考
  • 原文地址:https://www.cnblogs.com/jasonboren/p/11879343.html
Copyright © 2020-2023  润新知