Presentation is loading. Please wait.

Presentation is loading. Please wait.

XML Web Service 开发 第1章 XML Web Service 第2章 XML Web Service 体系结构

Similar presentations


Presentation on theme: "XML Web Service 开发 第1章 XML Web Service 第2章 XML Web Service 体系结构"— Presentation transcript:

1 XML Web Service 开发 第1章 XML Web Service 第2章 XML Web Service 体系结构

2 第8章 XML Web Service 设计 数据类型约束 性能 可靠性 版本控制 使用屏幕抓取实现虚拟 Web 服务 聚合 Web 服务

3 数据类型约束 8.1 数据类型约束 协议约束 结构和类的比较 类型化数据集和非类型化数据集的比较 数组和集合的比较 异常

4 协议约束 数据类型 SOAP POST GET 基元类型  枚举类型 基元类型数组 类和结构  类和结构的数组 XmlNode
8.1 数据类型约束 数据类型 SOAP POST GET 基元类型 枚举类型 基元类型数组 类和结构 类和结构的数组 XmlNode XmlNode 的数组

5 选择合适的协议 选择协议的注意事项 GET 和 POST 方法只支持基元类型、枚举类型和基元类型数组
8.1 数据类型约束 选择协议的注意事项 GET 和 POST 方法只支持基元类型、枚举类型和基元类型数组 SOAP 把复杂类型封装在 XML 中,并标准化调用格式 SOAP 支持丰富的功能扩展 HTTP 方法的优点 HTTP 协议比 SOAP 协议使用面更广 HTTP 协议的访问流量比 SOAP 小 如果禁用 HTTP GET 方法,就不能直接访问 Web 服务的 URL 进行测试

6 修改所支持的协议 8.1 数据类型约束 缺省情况下,新建的 Web 服务对 SOAP、HTTP GET 和 HTTP POST 方法都支持,使用下面的代码示例在 web.config 文件中修改这个缺省配置 <configuration> <system.web> <webServices> <protocols> <remove name="HttpGet" /> <remove name="HttpPost" /> </protocols> </webServices> </system.web> </configuration>

7 结构和类的比较 Web 服务传递类的对象时并不是以远程对象的形式完整实现,只是把对象中的公共属性值和字段进行远程传递
8.1 数据类型约束 Web 服务传递类的对象时并不是以远程对象的形式完整实现,只是把对象中的公共属性值和字段进行远程传递 从 Web 服务消费者的角度来看,类和结构没有很大的区别 XSD 的复杂数据类型支持继承,但是结构不支持继承,因此类比结构在 Web 服务中更加常用

8 类型化数据集和非类型化数据集的比较 类型化数据集的优点 代码更加容易读懂 微软 IntelliSense® 智能感知技术完全支持类型化数据集
8.1 数据类型约束 类型化数据集的优点 代码更加容易读懂 微软 IntelliSense® 智能感知技术完全支持类型化数据集 结构化数据集的语法提供了编译时的类型检查 使用非类型化数据集的场合 没有数据集架构,例如从第三方获得的数据集 数据没有静态可预测的结构 数据集是动态创建的,不适合定义架构

9 数组和集合的比较 在设计 Web 服务时要尽量使用强类型 不管是使用数据还是集合,都应该尽量避免异构的出现
8.1 数据类型约束 在设计 Web 服务时要尽量使用强类型 不管是使用数据还是集合,都应该尽量避免异构的出现 由于在多数情况下数组保存的是相同类型的数据,因此数组是比较常用的数据类型 使用异构类型时,必须在方法属性中使用 XmlInclude 加以说明

10 异常 使用返回值的方法处理 程序员往往会忽略 Web 服务方法返回的错误代码 使用抛出异常的方法处理
8.1 数据类型约束 使用返回值的方法处理 程序员往往会忽略 Web 服务方法返回的错误代码 使用抛出异常的方法处理 HTTP 协议的方法不支持这种处理方法,发生异常时只简单显示错误代码 500 必须使用 SOAP 类来支持异常处理 使用 SoapException 类来处理

11 第8章 XML Web Service 设计 数据类型约束 性能 可靠性 版本控制 使用屏幕抓取实现虚拟 Web 服务 聚合 Web 服务

12 性能 8.2 性能 常规性能考虑事项 .NET 需要考虑的具体事项 Web 服务中的缓存 异步服务器端方法

13 常规注意事项 缓存 如果缓存了错误的数据就意味着浪费内存 如果缓存了过多数据,那么其他应用程序使用的内存就会减少
常规性能考虑事项 缓存 如果缓存了错误的数据就意味着浪费内存 如果缓存了过多数据,那么其他应用程序使用的内存就会减少 如果缓存的数据太少,则发挥不了缓存的效果,因为没有缓存的数据必须重新构造和处理 如果对时间敏感的数据缓存时间太长,很可能使缓存数据失效 必须及时检查并释放无效的数据缓存项

14 常规注意事项 通常在使用 Application 存储可更新状态时使用锁
常规性能考虑事项 通常在使用 Application 存储可更新状态时使用锁 不要过度保护数据,即不要在没必要的数据上设置锁,也不要设置太长的上锁时间 把数据分区,这样就可以有选择地设置锁,保护重要的数据 使用 System.Threading 命名空间的 Interlocked 类在修改数据时自动设置锁 对不常修改的数据设置“多个读取/单个写入”的锁

15 常规注意事项 异步调用 当方法的执行时间较长时使用 调用的形式是 Beginxxxx/Endxxxx 方法对 衡量性能和行为的方法
常规性能考虑事项 异步调用 当方法的执行时间较长时使用 调用的形式是 Beginxxxx/Endxxxx 方法对 衡量性能和行为的方法 .NET 中提供了用于衡量性能和行为的测试工具 不必要的代码 程序员在实现功能后应该尽量删除不会被执行的代码 if (mySwitch.TraceVerbose) Trace.Write("Deposit failed"); Trace.WriteIf(mySwitch.TraceVerbose,"Deposit failed");

16 与 .NET 相关的注意事项 禁用会话状态,因为使用会话状态变量会影响系统的性能和可扩展性。两种禁用的方法 修改页面文件 修改配置文件
选择合适的状态提供者 进程内会话状态 以 Windows® 服务形式的进程外会话状态 在 SQL Server™ 数据库中的进程外会话状态 Page EnableSessionState="false" %> <sessionstate mode="off" />

17 与 .NET 相关的注意事项 避免异常发生 虽然 Web 服务可以支持异常处理,但一旦发生异常会影响性能,因此设计时应该尽量避免
使用本机数据源 如果后台数据库是 SQL Server,尽量直接使用 SQL 数据源而不要用 OLE DB 数据源 存储过程比直接使用 SQL 查询有更好的性能 SqlDataReader 类在处理大数据集时比 DataSet 性能好 使用 ASP.NET 网络园(Web Garden)

18 与 .NET 相关的注意事项 NET 需要考虑的具体事项 禁用调试模式 一定要禁用调试模式。在部署应用程序或进行任何性能测试之前,始终记住要禁用调试模式。如果启用了调试模式,应用程序的性能可能会受到非常大的影响 <configuration> <system.web> <compilation defaultLanguage="c#" debug="false" /> </system.web> </configuration>

19 在 Web 服务中使用缓存 .NET Web 服务支持两种缓存 输出缓存:把方法的执行结果进行缓存,下次以相同参数访问该方法时不需要再次执行
数据缓存:把数据对象进行缓存,下次使用时不需要重新创建 [WebMethod(CacheDuration=60)] public Acct[] GetAccounts(int acctID) { Context.Cache["ListOfSources"] = dsSources;

20 在 Web 服务中使用缓存 Web 服务中的缓存控制
文件和键值依赖:通过 CacheDependency 类,使用外部资源或其他缓存项来定义缓存数据的有效性 过期策略:可以有两种方法控制缓存的有效时间,绝对时间和最后一次访问相对时间 XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("employees.xml")); CacheDependency depend = new CacheDependency(Server.MapPath("employees.xml")); Context.Cache.Insert("Employees", doc, depend); Context.Cache.Insert("Employees", doc, null, DateTime.Now.AddMinutes(2), Cache.NoSlidingExpiration); Context.Cache.Insert("Employees", doc, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30));

21 在 Web 服务中使用缓存 优先级:设置缓存数据的优先级,当系统缺乏但需要释放缓存时会根据优先级进行有选择的处理
删除通知:缓存的数据在下列场景中被释放,可以通过编程使删除缓存数据时完成一些扫尾工作 缓存的有效期已过 缓存关联的对象发生变化 调用 Cache 类的 Remove 方法 CRL 在系统资源缺乏时自动清理缓存 场景:对于相对不固定的输出结果不要使用缓存 Context.Cache.Add("Employee", doc, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30), CacheItemPriority.High, null);

22 异步服务器端方法 实现异步 Web 方法调用 C# 的实现方法 Visual Basic .NET 的实现方法 适用异步调用的场景
异步服务器端方法 实现异步 Web 方法调用 C# 的实现方法 Visual Basic .NET 的实现方法 适用异步调用的场景 Web 服务方法需要调用另一个 Web 服务 Web 服务方法中需要执行文件的输入输出操作 Web 服务方法中需要执行其他耗时的 I/O 操作,例如套接字 I/O 等

23 实验 A 在一个 XML Web Service 中实现缓存
防火墙 Contoso Micropayment Web 服务 Woodgrove Bank Web 服务 Web 服务消费者 Internet

24 第8章 XML Web Service 设计 数据类型约束 性能 可靠性 版本控制 使用屏幕抓取实现虚拟 Web 服务 聚合 Web 服务

25 可靠性 8.3 可靠性 可用性 进程隔离:Application Domain 支持在同一个处理器上实现不同应用程序的边界隔离,因为这项技术在 CLR 上运行,所以尽量对非托管代码进行移植以使用这项技术 进程恢复模型:aspnet_wp.exe 进程支持 Web 服务应用程序的自动重新启动

26 可靠性 衡量方法 性能计数器 WMI 实现的功能 主要利用 PerformanceCounter 类来实现对性能计数器的编程访问
8.3 可靠性 衡量方法 性能计数器 主要利用 PerformanceCounter 类来实现对性能计数器的编程访问 WMI 实现的功能 监控应用程序的工作状态 探测瓶颈或错误 管理和配置应用程序 查询应用程序的数据 实现本地或远程的管理操作

27 第8章 XML Web Service 设计 数据类型约束 性能 可靠性 版本控制 使用屏幕抓取实现虚拟 Web 服务 聚合 Web 服务

28 版本控制 程序集的版本控制 把程序集部署到 GAC 中,可以方便地实现多个版本同步运行,该技术被称为 side-by-side
8.4 版本控制 程序集的版本控制 把程序集部署到 GAC 中,可以方便地实现多个版本同步运行,该技术被称为 side-by-side WSDL 文档的版本控制 当修改 WSDL 定义的 Web 服务接口时,必须同步修改 UDDI 中的注册信息,否则会产生验证问题 版本处理的变通方法 可以使用 XmlElement 或 XmlNode 支持参数和返回值经常变化的 Web 服务

29 第8章 XML Web Service 设计 数据类型约束 性能 可靠性 版本控制 使用屏幕抓取实现虚拟 Web 服务 聚合 Web 服务

30 使用屏幕刮擦实现虚拟 Web 服务 在.NET Framework 中的正则表达式 在 WSDL 文档中使用正则表达式
演示 使用屏幕抓取(Screen Scraping)实现虚拟 Web 服务

31 .NET Framework 中的正则表达式 正则表达式可以高效、灵活地处理文本 快速处理大量的文本并找到特定的字符
读取、编辑、替换或删除文本中的子字符串 向集合中添加额外字符串以生成报告 Regex 类 Match 类 MatchCollection 类

32 在 WSDL 文档中使用正则表达式 手工创建 WSDL 文档 在 binding 元素的 output 元素中指明输出消息的格式 例子
<urt:text> <urt:match name="nameOfElement" pattern="regular expression ..."/> .... </urt:text> 例子 <urt:text> <urt:match name="LineItem" pattern="<tr>(.*)?</tr>" repeats="*"/> </urt:match> </urt:text>

33 演示 使用屏幕抓取(Screen Scraping)实现虚拟 Web 服务

34 第8章 XML Web Service 设计 数据类型约束 性能 可靠性 版本控制 使用屏幕抓取实现虚拟 Web 服务 聚合 Web 服务

35 聚合 Web 服务 聚合 Web 服务的适用场景 设计一个聚合的 Web 服务 演示 一个聚合 Web 服务的例子

36 聚合 Web 服务的场景 聚合 Web 服务的适用场景 Web 服务的网关 企业内部的 Web 服务采用 Windows 集成身份验证提供内部访问,一些合作伙伴也需要访问,此时可以在防火墙外创建 Web 服务提供网关的功能,接收外部访问请求并转交给内部 复杂 Web 服务的简单接口 有些 Web 服务接口很复杂,可以创建一个新的 Web 服务提供相对简单的访问接口,但是这个 Web 服务是通过访问那些复杂服务来实现功能 Web 服务的入口 有时一个应用由多个 Web 服务协调完成,可以创建一个统一的访问入口

37 设计用于聚合的 Web 服务 使用协议的注意事项 处理交互式客户端 为 ISP 的设计 为 ASP 的设计 自修复与远程修复
建议使用 SOAP 协议,因为 SOAP 除了和 HTTP 绑定外,还可以绑定其他协议,例如 FTP、SMTP 处理交互式客户端 聚合有用户交互操作的 Web 服务往往会导致性能降低,因此尽量避免使用 为 ISP 的设计 对于外包给 ISP 的服务,必须考虑安全配置是否可以实现,访问是否容易进行等事项 为 ASP 的设计 监控 自修复与远程修复

38 Contoso Micropayment Web 服务 Northwind Electronic Funds Transfer Web 服务
Internet 防火墙 Contoso Micropayment Web 服务 Woodgrove Bank Web 服务 Northwind Electronic Funds Transfer Web 服务 Web 服务消费者

39 回顾 学习完本章后,将能够: 掌握不同 Web 服务协议对数据类型的约束
解释 Application 和 Session 状态变量影响性能和可扩展性的原因 掌握使用输出和数据缓存来改善 Web 服务的性能 掌握异步 Web 服务方法的实现 掌握使用 Web 服务的必要性 掌握 Web 服务中可以进行版本控制的模块 解释使用屏幕刮擦实现虚拟 Web 服务的方法 掌握多个 Web 服务的集成 掌握聚合 Web 服务技术的注意事项

40 实验 B 实现一个聚合 XML Web Service
Internet 防火墙 Contoso Micropayment Web 服务 Woodgrove Bank Web 服务 Northwind Electronic Funds Transfer Web 服务 Web 服务消费者


Download ppt "XML Web Service 开发 第1章 XML Web Service 第2章 XML Web Service 体系结构"

Similar presentations


Ads by Google