


面向面向.NET 的的 Web 应用程序设计应用程序设计n第第1章章 Microsoft.NET Framework 概述概述n第第2章章 使用使用 Microsoft Visual Studio.NETn第第3章章 使用使用基基于于 Microsoft.NET 的开发语言的开发语言n第第4章章 创建创建 Microsoft ASP.NET Web 窗体窗体n第第5章章 在在 Microsoft ASP.NET Web 窗体中添加代码窗体中添加代码n第第6章章 Microsoft ASP.NET Web 应用程序的跟踪机制应用程序的跟踪机制n第第7章章 验证用户输入验证用户输入n第第8章章 创建用户控件创建用户控件n第第9章章 使用使用 Microsoft Visual Studio.NET 访问关系型数据访问关系型数据n第第10章章 使用使用 Microsoft ADO.NET 访问数据访问数据n第第11章章 通过通过 Microsoft ADO.NET 调用存储过程调用存储过程n第第12章章 读写读写 XML 数据数据n第第13章章 使用和创建使用和创建 XML Web Servicen第第14章章 状态管理状态管理n第第15章章 配置、优化和部配置、优化和部署署 Microsoft ASP.NET Web 应用程序应用程序n第第16章章 Web 安全性介绍安全性介绍n第第17章章 Web 应用程序安应用程序安全性规划全性规划n第第18章章 验证用户输入验证用户输入n第第19章章 Internet 信息服务信息服务身份验证身份验证n第第20章章 保护保护 Web 页面页面安安全全n第第21章章 保护文件系统数据保护文件系统数据的安全的安全n第第22章章 保护保护Microsoft SQL Server的安全的安全n第第23章章 保证通信中的机密保证通信中的机密信息信息和数据完整性和数据完整性 n第第24章章 加密、散列和数据加密、散列和数据签名签名n第第25章章 测试测试 Web 站点的站点的安全性安全性面向面向.NET 的的 Web 应用程序设计应用程序设计第第13章章 使用和创建使用和创建 XML Web Servicen使用使用 XML Web Service概述概述n使用使用 HTTP 调用调用 XML Web Servicen使用代理调用使用代理调用 XML Web Servicen创建创建 XML Web Servicen扩展扩展 XML Web Service使用使用 XML Web Service概述概述nXML Web Servicen使用使用 XML Web Service的原因的原因n查找查找 XML Web Service13.1 使用使用 XML Web Service概述概述XML Web ServicenXML Web Servicel向其他应用程序提供数据和服务的应用程序逻辑单元l可通过标准的 Web 协议访问的程序逻辑单元n跨跨 Internet 应用程序间通讯应用程序间通讯l允许应用程序间跨 Internet 发送和接收信息lXML Web Service直接与 Internet 上的其他应用程序交互lXML Web Service不提供用户界面,而使用协定(Contract)描述自身提供的服务l可由本地或 Internet 上的多个应用程序使用13.1.1 XML Web ServiceXML Web Servicen语言、协议和平台无关性语言、协议和平台无关性l可以使用任何基于.NET 的开发语言开发 XML Web ServicelXML Web Service使用标准的 Web 协议和数据格式进行通讯l所有支持标准 Web 协议的服务器都能访问或部署 XML Web Servicel可在任何平台上实现 XML Web Servicen无状态架构无状态架构lXML Web Service服务器不保存每一个响应的状态l对 XML Web Service的每一次请求都创建新的对象,产生新的状态l可以使用 ASP.NET 状态管理技术保存不同请求间的状态13.1.1 XML Web ServiceXML Web Servicen支持异步编程支持异步编程l异步编程允许 ASP.NET 线程运行到结束l异步编程允许 ASP.NET 线程启动另一线程l异步编程避免 ASP.NET 线程受到阻塞,提高系统的性能和加强系统的可伸缩性l异步编程允许 ASP.NET Web 窗体和 XML Web Service异步执行n基于不断发展的基于不断发展的 W3C 标准标准lW3C 的标准在不断地发展l新的特征可以不断地添加到 XML Web Service13.1.1 XML Web Service选择目的地:天气预报:汇率:飞机票价:雨雨Redmond$1.56$1,999.98Northwind 商务旅游网商务旅游网使用使用 XML Web Service的原因的原因Internet天气预报天气预报XML Web Service汇率汇率XML Web Service飞机票价飞机票价数据库数据库飞机票价飞机票价XML Web Service13.1.2 使用使用 XML Web Service的原因的原因发布发布 XML Web Service URL 和描述和描述查找查找 XML Web Service.disco.wsdlWeb 服务服务代理代理Web窗体窗体UDDI发现发现 XML Web Service定位到定位到 XML Web Service的的 URL阅读阅读.wsdl 描述描述将将 XML Web Service绑定到代理绑定到代理通过代理从通过代理从 Web 窗体调窗体调用用 Web 服务服务13.1.3 查找查找 XML Web Service查找查找 XML Web Servicen通用说明、发现和集成通用说明、发现和集成(Universal Description,Discovery,and Integration,UDDI)l一种功能上类似于目录(与电话簿相似)而且独立于平台的框架,可提供在 Internet 上定位和注册 Web Service的方法n发现文件(发现文件(DISCO 文件)文件)l对 Web 服务器上的公共 Web Service进行分组l静态发现:.disco 文件l动态发现:.vsdisco 文件nWeb 服务描述语言服务描述语言(Web Services Description Language,WSDL)l基于 XML 的协定语言,用于描述服务器提供的网络服务l包含 Web Service的 URL、Web Service提供的方法和属性、Web Service使用的数据类型、Web Service使用的通信协议13.1.3 查找查找 XML Web Service多媒体演示多媒体演示 XML Web Service的执行模型的执行模型第第13章章 使用和创建使用和创建 XML Web Servicen使用使用 XML Web Service概述概述n使用使用 HTTP 调用调用 XML Web Servicen使用代理调用使用代理调用 XML Web Servicen创建创建 XML Web Servicen扩展扩展 XML Web Service使用使用 HTTP 调用调用 XML Web Servicen使用使用 HTTP 协议调用协议调用 XML Web Servicen课堂练习课堂练习 使用使用 HTTP 调用调用 XML Web Service13.2 使用使用 HTTP 协议调用协议调用 XML Web Service使用使用 HTTP 协议调用协议调用 XML Web Service1.浏览浏览 XML Web Service的的 URL2.选择一种选择一种 XMLWeb 服务方法服务方法3.调用调用 XML Web 服务方法服务方法4.查看查看 XML 响应响应13.2.1 使用使用 HTTP 协议调用协议调用 XML Web Service课堂练习课堂练习 使用使用 HTTP 调用调用 XML Web Service在本练习中,你将在本练习中,你将n输入教师计算机上的 XML Web Service URLn选择需要调用的 XML Web Service方法n输入参数的值n查看返回的 XML时间:时间:5 分钟分钟13.2.2 课堂练习课堂练习 使用使用 HTTP 调用调用 XML Web Service第第13章章 使用和创建使用和创建 XML Web Servicen使用使用 XML Web service概述概述n使用使用 HTTP 调用调用 XML Web Servicen使用代理调用使用代理调用 XML Web Servicen创建创建 XML Web Servicen扩展扩展 XML Web Service使用代理调用使用代理调用 XML Web Servicen使用代理调用使用代理调用 XML Web Servicen使用代理调用使用代理调用 XML Web Service的方法的方法n课堂练习课堂练习 使用代理调用使用代理调用 XML Web ServicenXML Web Service错误处理错误处理n演示演示 测试测试 XML Web Service的可用性的可用性 n使用使用 WSDL 工具生成代理代码工具生成代理代码13.3 使用代理调用使用代理调用 XML Web Service使用代理调用使用代理调用 XML Web Servicen使用代理调用使用代理调用 XML Web Servicel客户端浏览器请求 Web 窗体lWeb 窗体在代码中实例化代理类并使用代理调用 XML Web Servicel代理使用 SOAP 向 XML Web Service发送请求lXML Web Service使用 SOAP 向代理发送响应lWeb 窗体使用来自 XML Web Service的响应InternetXML Web服务服务代理代理Web窗体窗体SOAP13.3.1 使用代理调用使用代理调用 XML Web Service使用代理调用使用代理调用 XML Web Servicen代理类代理类lVisual Studio 使用 Web 服务描述语言(WSDL)来创建代理类l代理类公开 XML Web Service的方法,并配置在 XML Web Service和应用程序之间往返的参数l从 SoapHttpClientProtocol 类继承l与原始 XML Web Service类相似,但不包含应用程序逻辑,但添加了一些用于支持异步调用的方法l使用 SOAP 与 XML Web Service交互13.3.1 使用代理调用使用代理调用 XML Web Service使用代理调用使用代理调用 XML Web Service的方法的方法1.为为 XML Web Service创建创建 Web 引用引用2.创建创建 XML Web Service代理的实例代理的实例3.调用调用 XML Web Service的的 Web 方法方法4.生成生成 ASP.NET Web 应用程序应用程序Sub Button1_Click(s As Object,e As EventArgs).Dim ProxyGetStocks As New _ GetStocks.localhost.Service1()lblResults.Text=_ProxyGetStocks.GetRating(Contoso)End SubC#示例13.3.2 使用代理调用使用代理调用 XML Web Service的方法的方法课堂练习课堂练习 使用代理调用使用代理调用 XML Web Servicen新建新建 ASP.NET Web 应用程序应用程序n创建创建 XML Web Service代理类代理类n使用浏览器测试使用浏览器测试 XML Web Servicen查看查看 reference.vb 或或 reference.cs 文件文件13.3.3 课堂练习课堂练习 使用代理调用使用代理调用 XML Web ServiceXML Web Service错误处理错误处理n使用使用 XML Web Service可能遇到的错误可能遇到的错误l不可用的 XML Web Servicel超时错误lXML Web Service内部错误n在在 Web 窗体中测试服务是否可用窗体中测试服务是否可用l设置 XML Web Service代理类的超时参数l使用 TryCatchFinally 语句处理超时异常Visual Basic.NET 示例GetStocks.StockWebRef.Service1 ProxyGetStocks=new GetStocks.StockWebRef.Service1();ProxyGetStocks.Timeout=10000;try lblMessage.Text=ProxyGetStocks.GetRating(TextBox1.Text);catch(Exception err)lblMessage.Text=err.Message;13.3.4 XML Web Service错误处理错误处理XML Web Service错误处理错误处理n处理处理 XML Web Service产生的产生的 SOAP 异常异常l当 XML Web Service不能处理请求时,抛出 SoapException 异常l使用 TryCatchFinally 语句处理 SoapException 异常Try调用 XML Web ServiceCatch err As SoapExceptionLabel1.Text=Unable to process your requestEnd Trytry/调用 XML Web Servicecatch(SoapException err)Label1.Text=Unable to process your request;13.3.4 XML Web Service错误处理错误处理演示演示 测试测试 XML Web Service的可用性的可用性n编写超时错误处理语句:编写超时错误处理语句:TryCatch 语句语句n挂起挂起 Web 服务服务n测试异常处理测试异常处理13.3.5 演示演示 测试测试 XML Web Service的可用性的可用性使用使用 WSDL 工具生成代理代码工具生成代理代码nWeb 服务描述语言工具服务描述语言工具(wsdl.exe)l从 WSDL 协定文件、XSD 架构和.discomap 发现文档为 XML Web Service和 XML Web Service客户端生成代码n为处于指定为处于指定 URL 处的处的 XML Web Service创建创建.wsdl 文件,并用文件,并用 C#语言语言为为 XML Web Service创建代理类创建代理类n为位于指定为位于指定 URL 处的处的 XML Web Service创建代理类并将代理类保存在创建代理类并将代理类保存在 myProxy.cs 或或 myProxy.vb 文件中文件中n为多个为多个 XML Web Service创建代理类创建代理类l将目标 URL 指定为.disco 文件http:/servername/webservice1/service1.asxm?wsdlwsdl/out:myProxy.cs http:/servername/webservice1/WebServiceName.asmx?WSDLwsdl/language:VB/out:myProxyClass.vbhttp:/servername/webservice1/WebServiceName.asmx?WSDL13.3.6 使用使用 WSDL 工具生成代理代码工具生成代理代码第第13章章 使用和创建使用和创建 XML Web Servicen使用使用 XML Web service概述概述n使用使用 HTTP 调用调用 XML Web Servicen使用代理调用使用代理调用 XML Web Servicen创建创建 XML Web Servicen扩展扩展 XML Web Service创建创建 XML Web Servicen创建创建 XML Web Service 的方法的方法nXML Web Service的代码的代码n课堂练习课堂练习 创建创建 XML Web ServicenXML Web Service文档文档nXML Web Service和接口继承和接口继承13.4 创建创建 XML Web Service创建创建 XML Web Service 的方法的方法1.在在 Visual Studio.NET 中新建中新建 XML Web Service项目项目2.声明声明 WebMethod 函数函数3.生成生成 XML Web Service项目项目4.使用浏览器测试生成的使用浏览器测试生成的 XML Web Service13.4.1 创建创建 XML Web Service 的方法的方法XML Web Service的代码的代码n.asmx 文件文件n.asmx.vb 文件文件Imports SystemImports System.Web.Services _Class Service1 Public Function function1()As type在此处编写函数代码End FunctionEnd ClassC#示例13.4.2 XML Web Service的代码的代码XML Web Service的代码的代码nWebMethod 属性属性nnWebService 属性属性13.4.2 XML Web Service的代码的代码 课堂练习课堂练习 创建创建 XML Web Servicen创建创建 XML Web Servicen测试测试 XML Web Servicen更改命名空间更改命名空间13.4.3 课堂练习课堂练习 创建创建 XML Web ServiceXML Web Service文档文档nASP.NET 运行库生成两类文档运行库生成两类文档l基于 HTML 的文档l客户端应用程序与 XML Web Service交互时使用的文档(WSDL 文档)n自定义自定义 XML Web Service文档文档lWebMethod 属性lWebService 属性n对对 WebMethod 属性和属性和 WebService 属性的修改,属性的修改,立即反映到立即反映到 WSDL 文档中文档中13.4.4 XML Web Service文档文档Description 参数的内容XML Web Service和接口继承和接口继承n接口接口l类所公开的一组属性和方法的集合nXML Web Service接口继承接口继承lXML Web Service可以使用引用端口的类型或者引用由另一个 XML Web Service定义的绑定来继承接口lASP.NET 不支持协议未知的接口继承n解决方案解决方案l手动创建 WSDL 文档以引用其他命名空间中定义的端口类型l使用 WebServiceBinding 属性引用其他命名空间中定义的绑定13.4.5 XML Web Service和和接口继承接口继承XML Web Service和接口继承和接口继承nWebServiceBinding 属性属性13.4.5 XML Web Service和和接口继承接口继承using System;using System.Web.Services;using System.Web.Services.Protocols;namespace BrokerageFirmSoapRpcService WebServiceBinding(SecuritiesSoap,http:/ class Securities:WebServiceWebMethod SoapRpcMethod(Binding=SecuritiesSoap)public double InstantQuote(string symbol)double price=0;/实现代码 return price;XML Web Service方法为其实现操作的绑定的名称 与该绑定关联的命名空间定义绑定的位置,即 wsdl 文档的位置第第13章章 使用和创建使用和创建 XML Web Servicen使用使用 XML Web service概述概述n使用使用 HTTP 调用调用 XML Web Servicen使用代理调用使用代理调用 XML Web Servicen创建创建 XML Web Servicen扩展扩展 XML Web Service扩展扩展 XML Web Servicen上扩上扩n外扩外扩n克服伸缩性瓶颈克服伸缩性瓶颈n维持高可用性维持高可用性n高可用性的上扩资源高可用性的上扩资源n高可用性的外扩资源高可用性的外扩资源n高可用性资源编程高可用性资源编程n第三方第三方 XML Web Service 与可用性与可用性13.5 扩展扩展 XML Web Service上扩上扩n上扩上扩l将 XML Web Service升迁到更大、更快、功能更强大的计算机,以提高工作载荷量n优点优点l服务器比较容易管理l不需要增加服务器和系统管理员n缺点缺点l性价比较低,投入与获得的性能提高不成正比l扩展空间有限,最大的扩展也只能是将服务器升级为当前最快的计算机n上扩的场合上扩的场合l一般只有外扩不可行的情况下使用13.5.1 上扩上扩外扩外扩n外扩外扩l将资源部署在计算机群集中,以分散对资源的请求n优点与缺点优点与缺点l性能的提高与投入成正比,每事务的处理成本基本保持不变l服务器群集的管理比较复杂n外扩技术外扩技术l计算机群集l网络负载平衡(Network Load Balance,NLB)l资源分组技术l资源冗余技术13.5.2 外扩外扩外扩外扩n计算机群集计算机群集l在计算机网络中,一组协同工作以提供公用服务集并为客户端提供单个系统映像的独立计算机n网络负载平衡网络负载平衡l使用分布式算法来负荷平衡许多主机间的 IP 通讯l提高基于 IP 的重要服务(如终端服务、XML Web Service、虚拟专用网和流媒体)的可调整性和可用性l检测主机故障并自动向剩余主机重新分发通信,提高可用性l网络负载平衡的常见应用:Web Farmn网络负载平衡维持高可用性的条件网络负载平衡维持高可用性的条件l群集中的节点相互独立l任何节点都能处理各种请求l请求平均分布到群集中的各个节点13.5.2 外扩外扩克服伸缩性瓶颈克服伸缩性瓶颈n克服伸缩性瓶颈的方法克服伸缩性瓶颈的方法l分析并找出扩展瓶颈l分析造成扩展瓶颈的原因l不同类型的扩展瓶颈需要采用不同的方法解决l重复上述步骤,直到获得较满意的性能n克服伸缩性瓶颈举例克服伸缩性瓶颈举例l处理 XML Web Service访问一些难以扩展的资源时遇到的瓶颈l使用队列的方式分散处理请求13.5.3 克服伸缩性瓶颈克服伸缩性瓶颈维持高可用性维持高可用性n可用性可用性l通常以在计划的操作时间内系统处于可用状态的时间百分比n维持高可用性的方法维持高可用性的方法l确保 XML Web Service使用的所有资源,如服务器、电源都正常工作l如果一个或多个组件出现错误,系统能确保 XML Web Service仍然能够处理全部负载l灾难恢复计划、服务器配置文档、详细的服务器变更管理策略l优秀的系统管理员13.5.4 维持高可用性维持高可用性高可用性的上扩资源高可用性的上扩资源n上扩存在的问题上扩存在的问题l单点错误,如所请求资源所在服务器不能正常工作,将导致资源不可用n解决方案解决方案l故障转移群集lMicrosoft 群集服务n故障转移群集故障转移群集l一台计算机作为活动计算机l一台或多台计算机作为备份计算机nMicrosoft 群集服务组件(群集服务组件(Microsoft Cluster Component Service,MSCS)l群集服务l资源监视器l资源动态链接库13.5.5 高可用性的上扩资源高可用性的上扩资源高可用性的外扩资源高可用性的外扩资源n外扩需要注意的问题外扩需要注意的问题l必须为每一节点创建故障转移群集,以确保分组的资源具有容错能力l网络负载平衡群集并不自动具有容错能力l正确的配置网络负载平衡算法nMicrosoft Application Centerl确保群集的每一个节点能正确地处理各种请求l从网络负载平衡系统中将不能正常工作的节点移除nHTTPMON 监视与分析工具监视与分析工具l通过发送 HTTP 请求并分析结果监视网络负载平衡系统中的 Web 服务器l从网络负载平衡系统中将不能正常工作的节点移除13.5.6 高可用性的外扩资源高可用性的外扩资源高可用性资源编程高可用性资源编程n在群集化资源的访问方法不变的情况下,可以充分利用编在群集化资源的访问方法不变的情况下,可以充分利用编程的优点提高群集化资源的可用性程的优点提高群集化资源的可用性n通过编程获得高可用性需要注意的问题通过编程获得高可用性需要注意的问题l资源请求失败后,尝试重新发送请求l群集化资源的错误恢复需要一段时间l新的服务器未必能自动恢复原来的状态13.5.7 高可用性资源编程高可用性资源编程第三方第三方 XML Web Service 与可用性与可用性n减轻第三方减轻第三方 Web Service错误带来的影响的方法错误带来的影响的方法l与第三方 XML Web Service商签订服务品质协议(Service-Level Agrrement,SLA)l使用故障转移技术,即第三方 XML Web Service发生错误时,使用备用的 XML Web Servicel创建 XML Web Service的本地副本13.5.8 第三方第三方 XML Web Service 与可用性与可用性第三方第三方 XML Web Service 与可用性与可用性n使用备用使用备用 Web Servicel创建故障转移类l添加方法public class StockQuoteProxybool useBackup=false;WoodgroveProxy primary=new WoodgroveProxy();ProsewareProxy backup=new ProsewareProxy();public double GetQuote(string symbol)if(!useBackup)tryreturn primary.GetQuote(symbol);catch(Exception e)useBackup=true;Thread thread=new Thread(newThreadStart(this.Reset);thread.Start();return backup.GetQuote(symbol);private void Reset()Thread.Sleep(15000);useBackup=false;13.5.8 第三方第三方 XML Web Service 与可用性与可用性回顾回顾学习完本章后,将能够:学习完本章后,将能够:n描述在描述在 Web 窗体中调用窗体中调用 XML Web Service的目的和过的目的和过程程n在浏览器中通过在浏览器中通过 HTTP 协议调用协议调用 XML Web Servicen为为 XML Web Service创建创建 Web 引用代理,并在引用代理,并在 Web 窗体中调用窗体中调用 Web Service的方法的方法n使用使用 Visual Studio.NET 项目模板创建项目模板创建 XML Web Servicen扩展扩展 XML Web Service以提高以提高 XML Web Service的质量的质量实验实验 创建和使用创建和使用 XML Web Service医疗福利医疗福利Medical.aspx网站主页网站主页Default.aspx人寿保险福利人寿保险福利Life.aspx退休账户退休账户Retirement.aspx牙科福利牙科福利Dental.aspxDentists医生医生Doctors.aspx Doctors登录页面登录页面Login.aspx注册页面注册页面Register.aspxCohoWinery说明书说明书Prospectus.aspxXML Web ServicedentalService1.asmx Header用户控件用户控件Header.ascxASPStatetempdb实验实验 Web 应用程序应用程序用户控件用户控件namedate.ascx菜单组件菜单组件Class1.vb 或 Class1.csXML 文件文件Web.config。