第4章Web服务(上).ppt
第四章第四章 Web服务服务(上)(上)课程目标课程目标q 分布式计算和分布式计算和Web服务的概念服务的概念q Web服务详细介绍:体系结构、服务详细介绍:体系结构、Web Services技术技术q 如何创建和访问如何创建和访问Web服务服务q Web服务描述语言和服务描述语言和WSDL文件简单介文件简单介绍绍体验项目体验项目 通过通过ASP.NET技术实现了一个网络计算器。程序的计算页面如下图所技术实现了一个网络计算器。程序的计算页面如下图所示示:在操作数对话框中输入操作数后,点击相应的运算,如点击在操作数对话框中输入操作数后,点击相应的运算,如点击“加加”按按钮进行加法运算。程序运行效果如下图所示:钮进行加法运算。程序运行效果如下图所示:分布式计算和分布式计算和Web服务服务 随着随着.Net平台的推出,平台的推出,Web Services(网络服务)受到人们的极大关注。(网络服务)受到人们的极大关注。假如有一个站点向其它站点提供本站的在线新闻,而这些新闻均储存在假如有一个站点向其它站点提供本站的在线新闻,而这些新闻均储存在数据库中。如果其它站点需要共享这个站点的新闻,就必须让他们有权数据库中。如果其它站点需要共享这个站点的新闻,就必须让他们有权力访问该站点的数据库,但是访问的权限有限不可能先将数据库密码力访问该站点的数据库,但是访问的权限有限不可能先将数据库密码公布于众,然后让其它站点通过常规的方法来访问该数据库。公布于众,然后让其它站点通过常规的方法来访问该数据库。而而Web Services技术就可以很好的解决这种问题,只要在服务器上启用技术就可以很好的解决这种问题,只要在服务器上启用Web Services服务,在服务程序中设置访问数据库的各项操作,其它站点服务,在服务程序中设置访问数据库的各项操作,其它站点就可以通过就可以通过Web Services客户接口来访问这个客户接口来访问这个Web Services程序,以达到程序,以达到访问数据库的目的。访问数据库的目的。面向服务的体系结构(面向服务的体系结构(SOA)SOA是英文是英文Service-Oriented Architecture,即面向服务架构的缩写。,即面向服务架构的缩写。SOA是一种架构模型,它可以根据需求通过网络对松散耦合的粗粒度应是一种架构模型,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。本质上说,本质上说,SOA体现的是一种新的系统架构。在基于体现的是一种新的系统架构。在基于SOA架构的系统中,架构的系统中,具体应用程序的功能是由一些松耦合并且具有统一接口定义方式的组件具体应用程序的功能是由一些松耦合并且具有统一接口定义方式的组件(也就是(也就是service)组合构建而成的。可以说)组合构建而成的。可以说SOA的出现,将为整个企业的出现,将为整个企业级软件架构设计带来了巨大的影响。级软件架构设计带来了巨大的影响。分布式计算分布式计算 在进化链中的第二步是分布式计算,分布式计算允许不同的应用程序彼在进化链中的第二步是分布式计算,分布式计算允许不同的应用程序彼此进行通信(即使位于不同的计算机上也是如此)。此进行通信(即使位于不同的计算机上也是如此)。CORBA、MTS和和Enterprise Java Bean(EJB)等技术提供了包含各种类别的注册中心的)等技术提供了包含各种类别的注册中心的系统,因此应用程序可以找到其希望与之进行交互的组件,然后像调用系统,因此应用程序可以找到其希望与之进行交互的组件,然后像调用本地组件一样调用这些组件。本地组件一样调用这些组件。但仍然有一个问题。虽然系统可以自由地与系统内的任何对象进行通信,但仍然有一个问题。虽然系统可以自由地与系统内的任何对象进行通信,但仍然是一个封闭的系统。至少,客户机应用程序必须与服务器应用程但仍然是一个封闭的系统。至少,客户机应用程序必须与服务器应用程序使用相同的技术。另外,通常并不会将系统设计为从创建它的个体组序使用相同的技术。另外,通常并不会将系统设计为从创建它的个体组织外进行访问。织外进行访问。Web 服务服务 此进化链中下一个几乎不可避免的链接点就是此进化链中下一个几乎不可避免的链接点就是Web服务。服务。“Web服务服务”基基于于XML和和HTTP(大多数情况下),对很多人具有不同的含义。但在此(大多数情况下),对很多人具有不同的含义。但在此处,我们要将处,我们要将Web服务作为系统间基于服务作为系统间基于SOAP(Web服务交换消息的标准服务交换消息的标准协议)的消息交换进行讨论。协议)的消息交换进行讨论。基于基于SOAP的的Web服务将要发送类似如下的服务将要发送类似如下的XML消息:消息:classifieds这些消息将从一个系统进入另一个系统(通常通过这些消息将从一个系统进入另一个系统(通常通过HTTP)。接收系统)。接收系统对消息进行解释,进行相应的处理,然后发送另一个对消息进行解释,进行相应的处理,然后发送另一个SOAP消息作为响消息作为响应。应。什么是什么是Web服务服务 Web服务简介服务简介.NET平台提供了一种运行环境,即公用语言运行环境(平台提供了一种运行环境,即公用语言运行环境(CLR,Common Language Runtime)。对)。对CLR来说,它提供了一种内置机制来创建一个来说,它提供了一种内置机制来创建一个可编程的站点,对于可编程的站点,对于Web程序开发者和程序开发者和VB程序员而言,对于这种机制是程序员而言,对于这种机制是非常熟悉的。这种模型可以重用,同时也具有良好的可扩展性。它包含非常熟悉的。这种模型可以重用,同时也具有良好的可扩展性。它包含了开放的了开放的Internet标准(标准(HTTP,XML,SOAP,SDL),以便能够被网页),以便能够被网页浏览者所访问。浏览者所访问。ASP.NET使用使用.asmx文件来对文件来对Web Services进行支持。进行支持。.asmx文件和文件和.aspx文件一样都同属于文本文件,它被包含在文件一样都同属于文本文件,它被包含在.aspx文件之中,成为文件之中,成为ASP.NET应用程序中的一部分。应用程序中的一部分。WEB SERVICES Web Services就是个对外的接口,提供可供外部客户调用的函数(注意:就是个对外的接口,提供可供外部客户调用的函数(注意:里面同样有客户不可调用的函数)。假若存在一个服务端,它包含有我里面同样有客户不可调用的函数)。假若存在一个服务端,它包含有我们写好的们写好的Web Services,然后把它发布到服务器上以供客户端调用(同,然后把它发布到服务器上以供客户端调用(同时我们给了他们调用规则),客户端可以在从服务端获取信息时处于一时我们给了他们调用规则),客户端可以在从服务端获取信息时处于一种相对透明的状态。种相对透明的状态。Web Services传递的数据只能是序列化的数据,典型的如传递的数据只能是序列化的数据,典型的如XML数据。数据。Web Services是描述一组操作的接口,这些操作可以通过标准的是描述一组操作的接口,这些操作可以通过标准的XML消息在网络上进行访问。消息在网络上进行访问。Web Services可看作是一些模块化的应用程序,这些应用程序能够可看作是一些模块化的应用程序,这些应用程序能够在在Web上描述、发布、定位和调用。上描述、发布、定位和调用。Web Services描述了一种重要的分布式计算模型描述了一种重要的分布式计算模型。它更加强调基于单。它更加强调基于单个个Internet标准来解决异构的分布式计算问题。标准来解决异构的分布式计算问题。Web Services并不倾向于特定的编程语言和系统平台。并不倾向于特定的编程语言和系统平台。Web服务体系结构服务体系结构 Web服务技术的服务技术的SOA架构图架构图 服务提供者(服务提供者(Service provider):对外提供服务,并且通过注册来发布服):对外提供服务,并且通过注册来发布服务信息。它能够创建抽象的服务定义,并将它发布到服务注册器中。务信息。它能够创建抽象的服务定义,并将它发布到服务注册器中。服务注册器(服务注册器(Service broker):提供服务的发布和定位功能。):提供服务的发布和定位功能。服务请求者(服务请求者(Service requester):通过服务代理查询所需服务,并通过):通过服务代理查询所需服务,并通过服务提供者绑定服务。服务请求者可以使用一套查询机制来从服务注册服务提供者绑定服务。服务请求者可以使用一套查询机制来从服务注册器中找到器中找到WSDL文件。文件。Web Services是构建是构建SOA的一种方式。的一种方式。SOA是一种架构方法,它能够将是一种架构方法,它能够将各种异构应用集成起来并组成更大的分布式应用,最后通过服务接口的各种异构应用集成起来并组成更大的分布式应用,最后通过服务接口的形式来将整个应用支撑起来。形式来将整个应用支撑起来。ASP.NET Web服务的创建和访问服务的创建和访问 简单的服务:简单的服务:XML Web服务实现的最基本的方案是提供一些基本的服务实现的最基本的方案是提供一些基本的功能模块以供客户端使用。功能模块以供客户端使用。应用程序集成应用程序集成:使用:使用XML Web服务以一种集成的方式整合表面上看服务以一种集成的方式整合表面上看上去完全不同的现有应用程序。上去完全不同的现有应用程序。工作流程解决方案工作流程解决方案:XML Web服务能够提供给应用程序一个非常强服务能够提供给应用程序一个非常强大的机制,创建端对端的工作流程解决方案。这样的解决方案适于商大的机制,创建端对端的工作流程解决方案。这样的解决方案适于商务到商务交易的长期运行的情景。务到商务交易的长期运行的情景。XML Web服务是一个提供特别功能元素的可编程实体,比如应用程序逻服务是一个提供特别功能元素的可编程实体,比如应用程序逻辑,同时它还可以通过普遍存在的辑,同时它还可以通过普遍存在的Internet标准(例如标准(例如XML和和HTTP)来)来访问完全不同的系统。访问完全不同的系统。XML Web服务依赖于对服务依赖于对XML和其它因特网标准的和其它因特网标准的广泛接受,使用它们来创建支持应用程序互操作性的基础结构,从而解广泛接受,使用它们来创建支持应用程序互操作性的基础结构,从而解决了许多过去阻碍互操作性的问题。决了许多过去阻碍互操作性的问题。使用使用ASP.NET开发一个开发一个XML Web服务从下面三步开始:服务从下面三步开始:(1)创建一个带有)创建一个带有.asmx扩展名的文件。扩展名的文件。(2)在这个文件里中,使用一条指令声明)在这个文件里中,使用一条指令声明XML Web服务。服务。(3)定义组成)定义组成XML Web服务功能的服务功能的XML Web服务方法。服务方法。当使用当使用ASP.NET构造一个构造一个XML Web服务时,它自动支持客户端使用服务时,它自动支持客户端使用SOAP、HTTP-GET和和HTTP-POST通讯协议。即使通讯协议。即使HTTP-GET和和HTTP-POST支持使用支持使用URL编码的变量名编码的变量名/变量值对来传递消息,支持变量值对来传递消息,支持这两个协议的数据类型也没有支持这两个协议的数据类型也没有支持SOAP协议的数据类型丰富。协议的数据类型丰富。在在SOAP中,使用中,使用XML把数据传送到把数据传送到XML Web服务或从服务或从XML Web服务服务取回消息,可以使用支持丰富的数据类型集的取回消息,可以使用支持丰富的数据类型集的XSD模式定义复杂的数据模式定义复杂的数据类型。类型。ASP.NET处理定义到一个处理定义到一个XSD模式的映射类和到模式的映射类和到XML数据的映数据的映射对象的实例,以便通过网络传输。射对象的实例,以便通过网络传输。声明一个声明一个XML Web服务服务(1)需要把所需的)需要把所需的_WebService指令放到指令放到.asmx文件的最顶端。文件的最顶端。.asmx文文件的存在和件的存在和_WebService指令与所实现的指令与所实现的XML Web服务的服务的URL地址相地址相关。关。(2)实现)实现XML Web服务类来定义服务类来定义XML Web服务客户端可见的方法和数服务客户端可见的方法和数据类型。据类型。(3)把)把XML Web服务逻辑添加到那些方法上,以便处理服务逻辑添加到那些方法上,以便处理XML Web服务服务请求及其返回的响应。请求及其返回的响应。当使用当使用ASP.NET创建一个创建一个XML Web服务时,需如下三步:服务时,需如下三步:定义的定义的XML Web服务类可以直接被包含在服务类可以直接被包含在.asmx文件中,也可以被包含文件中,也可以被包含在一个单独的文件中。如果使用一个独立的文件,它必须被编译为二进在一个单独的文件中。如果使用一个独立的文件,它必须被编译为二进制码。可以选择应用一个制码。可以选择应用一个WebService属性到这个类上,来实现属性到这个类上,来实现XML Web服务。实现服务。实现XML Web服务的类可以继承于服务的类可以继承于WebService类。类。声明一个声明一个XML Web服务,这个服务服务,这个服务的实现存在于同一个文件的实现存在于同一个文件 添加一个添加一个_WebService指令到一个指令到一个.asmx文件的顶部,规定在这个过程文件的顶部,规定在这个过程中实现中实现XML Web服务的类和程序语言。服务的类和程序语言。Class属性可以被设置为和属性可以被设置为和_WebService指令在同一个程序集,或者是单指令在同一个程序集,或者是单独程序集中的一个类。独程序集中的一个类。using System.Web.Services;public class MyMath WebMethod public int Add(int num1,int num2)return num1+num2;保存在同一个文保存在同一个文件中。件中。声明一个声明一个XML Web服务,这个服务服务,这个服务的实现存在于一个程序集中的实现存在于一个程序集中 添加一个添加一个_WebService指令到一个指令到一个.asmx文件的顶部,规定实现文件的顶部,规定实现XML Web服务的类,程序集中包含实现和在这个实现中使用的程序语言。服务的类,程序集中包含实现和在这个实现中使用的程序语言。指定指定MyName.MyWebService类存类存在于在于XML Web服务的服务的Web应用程应用程序下序下Bin目录中的目录中的MyAssembly程程序集中。序集中。应用应用WebService属性属性 using System.Web.Services;using System;WebService(Namespace=http:/ class Math WebMethod public int Add(int num1,int num2)return num1+num2;设置设置XML域名空间为域名空间为http:/ Web服务,可以使用一个服务,可以使用一个描述描述XML Web服务的字符串来设置这个服务的字符串来设置这个XML Web服务的默认服务的默认XML域名域名空间。空间。从从WebService类衍生类衍生 使用使用ASP.NET实现一个实现一个XML Web服务的类,可以选择性地衍生于服务的类,可以选择性地衍生于Web Services类来获得访问公共的类来获得访问公共的ASP.NET对象,例如对象,例如Application、Session、User和和Context的权限。的权限。using System;using System.Web.Services;public class Util:WebService WebMethod(Description=Returns the time as stored on the Server,EnableSession=false)public string Time()return Context.Timestamp.TimeOfDay.ToString();使用使用Context属性来获得属性来获得服务器上的请求时间。服务器上的请求时间。定义定义XML Web服务方法服务方法用来实现用来实现XML Web服务的类的方法不能自动通过服务的类的方法不能自动通过Web与之通讯,但是有与之通讯,但是有了使用了使用ASP.NET创建的创建的XML Web服务,就能够很容易的添加这种能力。服务,就能够很容易的添加这种能力。为了添加这种功能,需要应用一个为了添加这种功能,需要应用一个WebMethod属性到公共方法中。能够属性到公共方法中。能够通过通过Web与之通讯的与之通讯的XML Web服务的方法被称为服务的方法被称为XML Web服务方法。服务方法。XML Web服务方法是服务方法是XML Web服务使用的消息传递基础结构的关键组服务使用的消息传递基础结构的关键组成部分。成部分。声明一个声明一个XML Web服务方法服务方法 要声明一个要声明一个XML Web服务,我们可以添加服务,我们可以添加_WebService指令和公共方指令和公共方法到实现法到实现XML Web服务的类中。服务的类中。using System;using System.Web.Services;public class Util:WebService public int Add(int a,int b)return a+b;WebMethodpublic long Multiply(int a,int b)return a*b;Multiply方法是一个方法是一个XML Web服务方法,因为该方法服务方法,因为该方法有一个应用到它上的有一个应用到它上的WebMethod属性。属性。using System.Web.Services;public class ServerUsage:WebService WebMethod(Description=Number of times this service has been accessed.)public int ServiceUsage()/如果如果appMyServiceUsage为空,即初始化为空,即初始化appMyServiceUsage为为1 if(ApplicationappMyServiceUsage=null)ApplicationappMyServiceUsage=1;else/增加增加usage的数目的数目ApplicationappMyServiceUsage=(int)ApplicationappMyServiceUsage)+1;return(int)ApplicationappMyServiceUsage;WebMethod(Description=Number of times a particualr client session has accessed this+XML Web service method.,EnableSession=true)public int PerSessionServiceUsage()/如果如果MyServiceUsage为空,即初始化为空,即初始化MyServiceUsage为为1if(SessionMyServiceUsage=null)SessionMyServiceUsage=1;else/增加增加usage的数目的数目 SessionMyServiceUsage=(int)SessionMyServiceUsage)+1;return(int)SessionMyServiceUsage;使用两个使用两个XML Web服务方服务方法的法的XML Web服务服务 示例示例Web服务的访问服务的访问 使用使用Web服务的过程实际上是实现服务的过程实际上是实现Web服务的使用者与服务的使用者与Web服务实现绑定服务实现绑定,并同时调用其它方法的过程。并同时调用其它方法的过程。为了简化绑定的过程,为了简化绑定的过程,Visual Studio.NET提供了服务代理类的方法。服提供了服务代理类的方法。服务代理类是根据务代理类是根据Web服务的描述文档(服务的描述文档(XXX.WSDL)产生本地类,在执行)产生本地类,在执行的过程中,客户使用代理类中的信息访问的过程中,客户使用代理类中的信息访问Web服务,实现方法的调用。服务,实现方法的调用。private void Button1_Click(object sender,System.EventArgs e)/创建代理类对象创建代理类对象localhost.Service1 ClientProxy=new localhost.Service1();try/通过代码类对象访问通过代码类对象访问Web服务服务if(ClientProxy.ValidUser(TxtUserId.Text,txtPwd.Text)Label1.Text=OK;else Label1.Text=ERROR;catch(e)throw e;finallyClientProxy.Dispose();客户程序中调用客户程序中调用Web服务的示例服务的示例Web服务描述语言服务描述语言WSDL是一种描述网络服务(是一种描述网络服务(network service)的)的XML格式,网络服务是格式,网络服务是能对面向文档类型的信息和面向过程的信息进行操作的端点(能对面向文档类型的信息和面向过程的信息进行操作的端点(endpoint)集合。对操作和消息的描述是抽象性的,并在定义端点时,将消息和操集合。对操作和消息的描述是抽象性的,并在定义端点时,将消息和操作绑定到具体的网络协议和消息格式上。作绑定到具体的网络协议和消息格式上。WSDL是可扩展的,它允许对端点和端点间的消息进行描述,同时不去是可扩展的,它允许对端点和端点间的消息进行描述,同时不去考虑具体的消息格式或者双方用于通讯的网络协议等。考虑具体的消息格式或者双方用于通讯的网络协议等。WSDL源于微软的简单对象访问协议(源于微软的简单对象访问协议(SOAP)和)和IBM的网络可访问服务的网络可访问服务规范语言(规范语言(NASSL)。)。WSDL替代了替代了NASSL和和SOAP,以作为在,以作为在UDDI注册注册中表达商业服务的手段。中表达商业服务的手段。一个简单的一个简单的HelloWebService服务的服务的WSDL文件如下:文件如下:.每个每个WSDL文件的根元素都是文件的根元素都是,必须在,必须在元素中提元素中提供各种名称空间的声明。三个必须做的外部名称空间声明是供各种名称空间的声明。三个必须做的外部名称空间声明是WSDL、SOAP和和XSD(XML 模式定义)。模式定义)。TNS指的是指的是MobilePhoneService,这表,这表示示TNS(targetNamespace的缩写)包含专为的缩写)包含专为 MobilePhoneService 定义的定义的所有元素和属性的名称。所有元素和属性的名称。WSDL是在是在WSDL编写中使用得最多的主要名称编写中使用得最多的主要名称空间。空间。WSDL文档在网络服务的定义中使用下列元素:文档在网络服务的定义中使用下列元素:Types:数据类型定义的容器,它使用某种类型系统(如:数据类型定义的容器,它使用某种类型系统(如 XSD)。)。Message:通信数据的抽象类型化定义。:通信数据的抽象类型化定义。Operation:对服务所支持的操作的抽象描述。:对服务所支持的操作的抽象描述。Port Type:操作的抽象集合,这些操作由一个或多个端点支持。:操作的抽象集合,这些操作由一个或多个端点支持。Binding:特定端口类型的具体协议和数据格式规范。:特定端口类型的具体协议和数据格式规范。Port:定义为绑定和网络地址组合的单个端点。:定义为绑定和网络地址组合的单个端点。Service:相关端点的集合。:相关端点的集合。WSDL的用途的用途 创建服务时,都是因为希望其他人使用此服务。为了使用服务,需要知创建服务时,都是因为希望其他人使用此服务。为了使用服务,需要知道向服务发送什么信息、服务将发送回什么信息以及在何处能找到此服道向服务发送什么信息、服务将发送回什么信息以及在何处能找到此服务。当然,可以将这些放入字处理文档中,但相比之下,如果此信息采务。当然,可以将这些放入字处理文档中,但相比之下,如果此信息采用标准的、最好为人机均可读的格式,则要有用得多。用标准的、最好为人机均可读的格式,则要有用得多。WSDL就提供了这样的标准格式。除了不会造成混淆不清外,其主要优就提供了这样的标准格式。除了不会造成混淆不清外,其主要优势是,由于势是,由于WSDL是事实标准,且采用是事实标准,且采用XML格式,因而可由计算机进行格式,因而可由计算机进行处理,便于自动创建客户机(甚至自动创建服务的框架)。处理,便于自动创建客户机(甚至自动创建服务的框架)。Classifieds Department将要创建接受和管理将要创建接受和管理classified广告的服务,以允许其它人广告的服务,以允许其它人(如作业聚合网站)能更方便地使用此服务,他们同样也将使用(如作业聚合网站)能更方便地使用此服务,他们同样也将使用WSDL文件对其进行描述。文件对其进行描述。课程总结课程总结 q 分布式计算和分布式计算和Web服务的概念服务的概念q Web服务详细介绍:体系结构、服务详细介绍:体系结构、Web Services技术技术q 如何创建和访问如何创建和访问Web服务服务q Web服务描述语言和服务描述语言和WSDL文件简单介文件简单介绍绍