第13章Web服务.ppt
1第第1313章章 WebWeb服务服务 13.113.1 WebWeb服务的概念和用途服务的概念和用途 13.2 13.2 建立建立WebWeb服务服务 13.3 13.3 基于基于.Net.Net的的WebWeb服务客户端程序服务客户端程序 13.4 13.4 使用使用Web服务的例子服务的例子 2 Micosoft.Net Micosoft.Net平台架构中的分布式系统主要包平台架构中的分布式系统主要包括两部分:用括两部分:用ASP.NetASP.Net技术构建服务器端动态网页,技术构建服务器端动态网页,以及以及WebWeb服务服务(Web Service(Web Service或或XML Web Service)XML Web Service)。前边章节已详细介绍了构建服务器端动态网页的方前边章节已详细介绍了构建服务器端动态网页的方法,本章将介绍法,本章将介绍WebWeb服务的基本概念和构建方法。服务的基本概念和构建方法。313.1 WebWeb服务的概念和用途服务的概念和用途 应用程序集成应用程序集成 代码复用代码复用 工作流程解决方案工作流程解决方案 新的销售方式新的销售方式 由由Web服务组成的自动化系统服务组成的自动化系统 413.2 建立建立Web服务服务 Web Web服务采用客户服务采用客户/服务器模式。本节介绍服务服务器模式。本节介绍服务器端应做的工作,包括建立供客户端调用的器端应做的工作,包括建立供客户端调用的WebWeb服服务方法,以及为了客户端使用务方法,以及为了客户端使用WebWeb服务方法,提供服务方法,提供给客户端描述该给客户端描述该WebWeb服务的服务的WSDLWSDL文档。文档。513.2.1 用记事本建立用记事本建立Web服务服务 using System;using System;using System.Web.Services;using System.Web.Services;WebService(Namespace=http:/202.206.96.204/)WebService(Namespace=http:/202.206.96.204/)public class MyClass:WebServicepublic class MyClass:WebService WebMethodWebMethod/注意形参的名称将在图注意形参的名称将在图13.213.2中出现中出现public int MyWebMethod(int a,int b)public int MyWebMethod(int a,int b)return a+b;return a+b;/在该方法后还可以定义其他在该方法后还可以定义其他WebMethodWebMethod 67813.2.2 用用VS2005建立建立Web服务服务【例例13.213.2】如如果果使使用用VS2005VS2005建建立立这这个个WebWeb服服务务文文件件,具体步骤如下:具体步骤如下:1.1.单击单击VS2005VS2005菜单的菜单的 文件文件(F)|(F)|新建网站新建网站(W)(W)菜单菜单项项,打开,打开 新建网站新建网站 对话框对话框(图图9.10)9.10),在对话框,在对话框中,选中中,选中ASP.NET WebASP.NET Web服务服务,在,在 位置位置(L)(L)编辑编辑框中,选择框中,选择 文件系统文件系统,语言语言(G)(G)编辑框选择编辑框选择C#C#语言。单击语言。单击 浏览浏览 按钮,选择存放按钮,选择存放WebWeb服务的位置,服务的位置,单击确定按钮,生成一个单击确定按钮,生成一个WebWeb服务文件服务文件Service.asmxService.asmx,修改名称为,修改名称为e13_2_2.asmxe13_2_2.asmx,该该文件只有一句话指示代码在文件文件只有一句话指示代码在文件Service.csService.cs中,中,Service.csService.cs文件如下:文件如下:9using System;using System;using System.Web;using System.Web;using System.Web.Services;using System.Web.Services;using System.Web.Services.Protocols;using System.Web.Services.Protocols;WebService(Namespace=http:/tempuri.org/)WebService(Namespace=http:/tempuri.org/)WebServiceBinding(ConformsTo=WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)WsiProfiles.BasicProfile1_1)public class Service:System.Web.Services.WebServicepublic class Service:System.Web.Services.WebService public Service()public Service()/如果使用设计的组件,请取消注释以下行如果使用设计的组件,请取消注释以下行 /InitializeComponent();/InitializeComponent();WebMethod WebMethod public string HelloWorld()public string HelloWorld()return Hello World;return Hello World;102.用语句用语句WebService(Namespace=WebService(Namespace=“http:/202.206.96.204/http:/202.206.96.204/”)替换语句替换语句WebService WebService(Namespace=(Namespace=“http:/tempuri.org/http:/tempuri.org/”),目的是在,目的是在访问时不出现建议提示。访问时不出现建议提示。3.文件中已有一个文件中已有一个WebWeb服务方法服务方法HelloWorldHelloWorld,用下面,用下面的的WebWeb服务方法服务方法MyWebMethodMyWebMethod替换替换HelloWorldHelloWorld方法:方法:public int MyWebMethod(int a,int b)public int MyWebMethod(int a,int b)return a+b;return a+b;4.现现在在用用IEIE浏浏览览器器测测试试这这个个WebWeb服服务务,按按F5F5运运行行,将将显显 示示 类类 似似 图图 13.313.3的的 界界 面面(类类 名名 不不 同同),单单 击击MyWebMethodMyWebMethod,浏浏览览器器中中显显示示如如图图13.213.2。在在编编辑辑框框中中输输入入两两个个加加数数分分别别为为1010和和2020,然然后后单单击击 调调用用 按按钮钮,打打开开另另一一浏浏览览器器窗窗口口如如图图13.413.4,这这是是用用XMLXML表表示的调用示的调用WebWeb服务方法服务方法MyWebMethodMyWebMethod返回的结果。返回的结果。1113.2.3 服务描述语言服务描述语言(WSDL)WSDL(Web Services Description Language)WSDL(Web Services Description Language)中文名称为中文名称为WebWeb服务描述语言,用来对服务描述语言,用来对WebWeb服务进行服务进行说明。说明。WSDLWSDL是基于是基于XMLXML的,用的,用WSDLWSDL生成一个生成一个XMLXML文档,文档,可以提供关于可以提供关于WebWeb服务的操作信息,例如,抽象形服务的操作信息,例如,抽象形式的服务接口信息、数据传输的具体访问协议和格式的服务接口信息、数据传输的具体访问协议和格式、供客户端使用该式、供客户端使用该WebWeb服务的细节等等。服务的细节等等。服务描服务描述是一个使用述是一个使用WSDLWSDL语言的语言的XMLXML文档,定义了文档,定义了WebWeb服务服务能理解的能理解的WebWeb服务消息格式。服务描述起一个协定服务消息格式。服务描述起一个协定的作用,用来定义一个的作用,用来定义一个WebWeb服务的行为并且指示潜服务的行为并且指示潜在的客户如何与之交互。在的客户如何与之交互。1213.3 基于基于.Net的的Web服务客户端程序服务客户端程序 Web Web服务客户端程序用来调用服务器端的服务客户端程序用来调用服务器端的WebWeb服服务方法,用浏览器调用务方法,用浏览器调用WebWeb服务方法,只能算做一服务方法,只能算做一种测试,通过这种测试,可以验证种测试,通过这种测试,可以验证WebWeb服务方法的服务方法的正确性,发现错误。作为客户端程序,无论在何处,正确性,发现错误。作为客户端程序,无论在何处,采用那种操作系统,希望只要知道采用那种操作系统,希望只要知道WebWeb服务的所在服务的所在网址,就可以调用远程网址,就可以调用远程WebWeb服务方法。服务方法。WebWeb服务客户服务客户端程序一般应在端程序一般应在WebWeb网上的另一台计算机中,仅仅网上的另一台计算机中,仅仅做实验或学习,也可以和做实验或学习,也可以和WebWeb服务在同一台计算机服务在同一台计算机中。本节介绍如何实现基于中。本节介绍如何实现基于.Net.Net的的WebWeb服务客户端服务客户端程序。程序。1313.3.1 13.3.1 调用调用Web服务方法采用的协议服务方法采用的协议 客户端可用客户端可用HTTP-GETHTTP-GET、HTTP-POSTHTTP-POST或或SOAPSOAP协议调协议调用用WebWeb服务方法服务方法。HTTP-GETHTTP-GET和和HTTP-POSTHTTP-POST协议是协议是WebWeb网网页传递参数的标准协议,页传递参数的标准协议,使用这两种协议调用使用这两种协议调用WebWeb服服务方法只能采用务方法只能采用变量名变量名/变量值对传递变量值对传递参数参数,无法传,无法传递象递象DataSetDataSet、二进制文件等数据类型,为了传递复、二进制文件等数据类型,为了传递复杂数据类型,应采用杂数据类型,应采用SOAPSOAP协议。协议。SOAP(Simple SOAP(Simple Object Access ProtocolObject Access Protocol,简单对象访问协议,简单对象访问协议)是基是基于于XMLXML的消息传递协议,由于是基于的消息传递协议,由于是基于XMLXML,保证了不,保证了不同系统的不同程序或组件之间,只要支持同系统的不同程序或组件之间,只要支持SOAPSOAP,都,都可以互相通信。如可以互相通信。如使用使用SOAPSOAP协议调用协议调用e13_2_1.asmxe13_2_1.asmx 中的中的WebWeb服务方法,必须对调用的服务方法,必须对调用的WebWeb服务方法和方服务方法和方法参数用法参数用SOAPSOAP协议封装,实现比较复杂,协议封装,实现比较复杂,.Net.Net系统系统一般采用创建代理类的方法,下节将详细介绍创建一般采用创建代理类的方法,下节将详细介绍创建代理类的步骤。代理类的步骤。1413.3.2 VS2005建立建立Web服务客户端程序服务客户端程序 Web Web服务客户端程序用服务客户端程序用SOAPSOAP协议调用远程的协议调用远程的WebWeb服务方法,服务方法,WebWeb服务客户端程序必须把程序的调用及服务客户端程序必须把程序的调用及其参数用其参数用SOAPSOAP协议封装,传送给协议封装,传送给WebWeb服务。调用服务。调用WebWeb服服务方法后,务方法后,WebWeb服务方法用服务方法用SOAPSOAP协议返回用协议返回用XMLXML表示的表示的结果,因此需要对用结果,因此需要对用SOAPSOAP协议封装的协议封装的XMLXML文档进行解文档进行解析,得到指定类型的数据。析,得到指定类型的数据。.Net.Net系统采用创建代理类系统采用创建代理类的方法实现这一目的。所谓代理,就是在客户端生成的方法实现这一目的。所谓代理,就是在客户端生成本地对象,作为远程本地对象,作为远程WebWeb服务方法的前端,该代理的服务方法的前端,该代理的功能是,功能是,WebWeb服务客户端程序用一般程序语言那样调服务客户端程序用一般程序语言那样调用用WebWeb服务方法,代理程序负责将调用以及调用参数服务方法,代理程序负责将调用以及调用参数用用SOAPSOAP协议封装,然后调用协议封装,然后调用WebWeb服务方法,由代理程服务方法,由代理程序负责获得序负责获得WebWeb服务方法返回的数据,由于这些数据服务方法返回的数据,由于这些数据也用也用SOPASOPA协议封装,也要由代理程序转换为一般程序协议封装,也要由代理程序转换为一般程序语言能够理解的数据类型,传送给语言能够理解的数据类型,传送给WebWeb服务客户端程服务客户端程序。序。15【例例13.313.3】生成生成WebWeb服务客户端程序具体步骤如下:服务客户端程序具体步骤如下:1.打开打开VS2005VS2005,新建,新建C#C#语言语言windowswindows应用程序项目,应用程序项目,项目命为项目命为e13_3e13_3,在窗体中增加一个按钮,标题为,在窗体中增加一个按钮,标题为“调用调用WebWeb服务服务”,单击按钮将调用,单击按钮将调用WebWeb服务的服务的WebWeb方法,在窗体中增加方法,在窗体中增加2 2个文本框,用来输入两个加个文本框,用来输入两个加数。用数。用3 3个个LabelLabel控件作为提示信息,属性控件作为提示信息,属性TextText分别分别为:加数为:加数a a、加数、加数b b、和。用一个、和。用一个LabelLabel控件显示调控件显示调用用WebWeb服务的服务的WebWeb方法后返回的结果。设计界面如图方法后返回的结果。设计界面如图 2.建立建立WebWeb服务客户端服务客户端代理。单击代理。单击VS2005VS2005菜单菜单 项目项目|添加添加WebWeb引用引用 菜单项,弹出标题为菜单项,弹出标题为 添加添加WebWeb引用引用 的对话框如图的对话框如图 16171819203.3.在对话框中的在对话框中的URL(URL(U U)栏中输入栏中输入WebWeb服务的服务的URLURL,这,这个个WebWeb服务一般应在远程计算机中。本例服务一般应在远程计算机中。本例WebWeb服务和客服务和客户端在同一台计算机中,即是在户端在同一台计算机中,即是在13.2.213.2.2节中节中用用VS2005VS2005建立的建立的WebWeb服务,其服务,其URLURL为为http:/localhost:http:/localhost:VS2005 VS2005 WebWeb集成环境自带的集成环境自带的WebWeb服务器服务器端口号端口号/e13_2/e13_2_2.asmx/e13_2/e13_2_2.asmx。不能使用例子。不能使用例子e13_2_1e13_2_1建立的建立的WebWeb服务,因其不能自动创建服务,因其不能自动创建WSDLWSDL文件。然后单击文件。然后单击URL(U)URL(U)栏右侧箭头图标,栏右侧箭头图标,VS2005VS2005自动查找指定自动查找指定URLURL的的WSDLWSDL文件。见图文件。见图13.713.7。由于。由于VS2005 WebVS2005 Web集成环境自集成环境自带的带的WebWeb服务器服务器端口号不确定,调试很不方便,有时端口号不确定,调试很不方便,有时还出错,最好使用还出错,最好使用IISIIS服务器服务器。214.单击标题为单击标题为“添加引用添加引用”的按钮,在解决方案资源管的按钮,在解决方案资源管理器中,可以看到一个新的理器中,可以看到一个新的“Web ReferencesWeb References”。见。见图图13.813.8。引用。引用ServiceService采用如下格式:采用如下格式:localhost.Servicelocalhost.Service。请注意,如果。请注意,如果WebWeb服务器服务器IPIP地址地址或端口号改变,这个引用必须重新建立。或端口号改变,这个引用必须重新建立。5.为按钮增加事件函数如下,注意引用为按钮增加事件函数如下,注意引用ServiceService的方法。的方法。private void button1_Clickprivate void button1_Click(object sender,EventArgs e)(object sender,EventArgs e)int x,y;int x,y;x=Convert.ToInt16(textBox1.Text);x=Convert.ToInt16(textBox1.Text);y=Convert.ToInt16(textBox2.Text);y=Convert.ToInt16(textBox2.Text);localhost.Service ws=new localhost.Service();localhost.Service ws=new localhost.Service();label3.Text=ws.MyWebMethod(x,y).ToString();label3.Text=ws.MyWebMethod(x,y).ToString();226.按按F5F5,运行,输入,运行,输入2 2个加数,单击标题为个加数,单击标题为 调用调用WebWeb服务服务 按钮,显示两个加数的和。按钮,显示两个加数的和。