Web服务是一项很有前途的新技术,可用于在Internet上的各种使用者和企业服务,从Google搜索引擎、Microsoft Map Point和eBay Price Watcher,到像Microsoft Passport这样的B2B后端系统以及内部的集成方案。开发人员发现Microsoft的.NET Framework是创建和部署Web服务的强大工具。
本书为富有经验的开发人员提供了快速而全面的教程,展示了如何使用ASP.NET、Visual Studio.NET以及.NET Framework的System.Web.Services名称空间的属性和类型开发Web服务。本书首先深入介绍了定义Web服务的协议,特别是HTTP、SOAP和WSDL,然后简要介绍了Visual Studio.NET和.NEt fRAMEWORK的独特性质,这些性质使创建和部署Web服务变得更容易。本书包括了大量C#代码示例,引导你处理一些Web服务开发中富有挑战性的问题,包括使用代理、简单数据类型和复杂数据类型的封送、状态管理、安全性、性能调整以及跨平台互操作性。本书还介绍了以下内容:
● 理解Visual Studio.NET生成的各种文件
● 阅读重要的XML模式文档,包括SOAP请求和响应、简单数据类型和复杂数据类型的表示以及WADL和UDDI文档
● 使用.NET和XML属性更好地控制Web服务的行为
● 使用IIS和FrontPage Extensions或UNC文件共享部署Web服务
● 使用异步消息传递和缓存,以便获得更高的性能
● 使用UDDI发布协议和tModel,使第三方能够访问你的Web服务
● 使用WSDL、VS.NET和.NET Framework SDK工具自动生成和使用客户代理类
● 使用.NET Framework和IIS的安全特性编写安全的Web服务
本书最后提供了.NET Framework类库的System.Web.Services名称空间的额外资源和API快速参考的内容丰富的列表。本书是为想要创建企业级XML Web服务并且熟悉C#和.NET Framework的程序员编写的,提供了大量实用信息和好的建议。
前言
第一章 理解Web服务
为什么使用Web服务
Web服务的起源
.NET Web服务体系结构
相互竞争的Web服务技术
其他技术
第二章 创建ASP.NET Web服务
创建Web服务 "Hello, World"
WebService属性
WebMethod属性
部署Web服务
使用.NET编译器
第三章 使用Web服务
Web服务的使用者模式
访问Web服务:HTTP
表述Web服务:WSDL
调用Web服务:客户代理
创建客户代理
使用代理类
通过Screen Scraper服务使用Web站点
第四章 处理数据类型
处理简单数据类型
处理复杂数据类型
使用复杂数据类型作为参数
使用DataSet传递数据
使用二进制数据
第五章 管理状态
有关状态的争论
状态管理方案
ASP.NET的会话状态功能
会话状态配置
例子:管理会话状态
应用程序状态
自定义cookie
无状态Web服务和票据
SOAP标题
第六章异步服务
异步使用
异步服务
第七章 缓存和分析
ASP.NET缓存
简单的输出缓存
数据缓存
缓存依赖性
使用缓存代替有状态设计
分析Web服务
第八章 调试、追踪和日志
在Visual Studio.NET中进行调试
使用异常
使用.NET记录错误
SOAP扩展
高级SOAP扩展
第九章 安全性和认证
潜在的脆弱点
Web服务认证
ISS安全特性
ASP.NET安全性
程序安全性
自定义的认证技术
过程安全性
第十章 发布和发现
发布
UDDI
UDDI企业注册服务
注册企业实体
WSDL和UDDI
Visual Studio.NET和UDDI
UDDI消息传递
使用.NET访问UDDI
WS-Inspection选择
自定义Internet Explorer测试页
第十一章 互操作性
各个规范的状态
实现上的差异
SOAP互操作性
WSDL互操作性
HTTP互操作性和M-Post
已知的互操作问题
使互操作性达到最好
附录一 名称空间快速参考
附录二 Web服务技术
词汇表
在过去几年里,我们一直生活在与Web有关的无休止的大肆宣传之中。一些技术专家、专栏作家和CEO们不断宣称Internet将要彻底改变一切,从整个社会的社会结构到购买小商品的方式。虽然已经发生了一些变化,但是其他根本性的预言和雄心勃勃的新技术现在看来似乎遇到了一点麻烦。
人们经常想起的一种说法是“可编程的Internet”,在这种Internet上,各种类型的应用程序和设备不断通信,开放而轻松地共享特性和功能。而事实是,虽然我们现在有了一个连接全球计算机的空前的网络,但是我们还没有开始意识到它的全部潜力。虽然出现了像COM/DCOM、CORBA/IIOP、RMI和XML-RPC这样雄心勃勃的技术,但是目前Internet还是主要用于发送电子邮件和检索HTML页面。如果没有费用高昂的定制工作,那么专用平台上的程序仍然无法使用其他平台上的设备。
现在,Microsoft(以及像IBM和Sun这样的传统竞争对手)已经提议了一个新的“Web服务平台”,该平台基于XML和相关的技术,目标是让应用程序在Internet上共享功能就像在本地计算机上一样容易。其潜力惊人,实现方式简单而优美,并且令人惊诧的是,它是开放的。这种服务从一开始就合并了XML,跨平台支持是它固有的特性,并且可以从参与此平台的开发商那里获得开发工具来处理所有繁重的工作。在Internet上已经散布了Web服务和简单的Web服务目录,从占星术和翻译服务到Microsoft自己的TerraService(提供对1.5兆字节的卫星图像SQL Server数据库的访问)。像eBay和McAffee这样的公司努力使用.NET开发一些创新的Web服务解决方案,而像Google和Amazon这样的重要网站已经使用Web服务接口展示了它们的一些能力。
Microsoft.NET Framework是这个平台的一个实现方式,也是一个可以很容易地创建可在其上面互操作的服务的工具。Microsoft已经(至少是在某种程度上是这样)放弃了它传统上对不公开的技术和专用标准的偏爱。Unix计算机上的Java客户可以使用.NET服务,而.NET客户也可以同样容易地与使用其他大多数非.NET语言编写的Web服务交互(条件是它们遵循了基于XML的新兴的Web服务标准协议,如SOAP和WSDL)。使用COM和CORBA进行分布式编程的复杂性和麻烦已经被简单的、基于XML的轻量级标准所取代。概括起来就是:基于XML的一般Web服务(特别是.NET Web服务)是一次从根本上进行改变和改进的尝试,以达到全球连接的长期目标。
本书内容
本书从开发人员的角度讨论了Microsoft.NET Web服务。我们介绍了如何使用.NET Framework及其ASP.NET工具创建Web服务,但更重要的是,我们考虑了设计有效、可扩展并且健壮的Web服务所需的最佳方法。本书还介绍了.NET Web服务技术的一些基础知识:在幕后工作的开放标准,如SOAP和WSDL。这方面的知识不是使用.NET编写Web服务所必需的,但是在决定如何使用它的特性以及如休解决它的局限性时,这些知识是非常有用的。
在整本书中,我们还展示了如何“扩展”Web服务。Web服务协议最好的一个特性就是它们的简单性。与早期的分布式对象技术不同,基于XML的Web服务标准没有指定处理安全性、事务或者对象合并的机制。为了提供这些特性,你需要设计和实现自己解决方案,并利用像COM+和ASP.NET这样的平台技术。在整本书中,你将会看到开发这些定制解决方案的最佳方法。
本书的结构
本书首先介绍Web服务的基础知识:它们的工作方式、如何创建它们以及如何在客户中使用它们。有了.NET开发工具,一旦你理解了规则和限制,编写简单的Web服务并不比创建一个普通的类更困难。本书的绝大部分——后面的6章——都是介绍如何将通常需要的高级特性集成到Web服务中。通常,介绍了一些技术细节来解决特定的问题,但是没有提前介绍它们,那可能会因为一些额外的细节而使讨论变得更混乱。例如,SOAP标题是一种实现自定义状态管理的强大方式,而SOAP扩展是一种执行自动追踪的方式。
本书最后介绍了如何发布Web服务,使之能够很容易访问,以及你如何打破Web服务与非.NET代码之间的界限,实现真正的跨平台解决方案。
下面的简介说明了每一章包含的内容:
第一章:理解Web服务
历史上总是充满了一些失败的Web技术,而Microsoft对这些失败的贡献决不是最少的,包括早期像ActiveX文档和Visual BAsic Web类这样的方法。不过,有了.NET,我们有很好的理由相信Mocrosoft已经从过去的失败中听取了教训。在本章中,你将了解到为什么.NET XML Web服务应该用于其他技术停住脚步的地方,以及Web服务在未来的应用中将会起到什么作用。你还将了解到作为.NET Web服务基础的一些标准,如WSDL、SOAP和HTTP。
第二章:创建ASP.NET Web服务
本章首先介绍每一个开发人员都很喜欢的例子,即经典的HelloWorld程序——这次要将它彻底改造为一个Web服务。在结束本章之前,你将转移到一个DNS搜索服务,学习如何在Internet Explorer中使用HTTP GET测试Web方法。在此过程中,你将学习.NET的Web服务类型、虚拟目录和Web服务部署以及如何在Visual Studio.NET中开发Web服务或者使用命令行编译器编译它。
第三章:使用Web服务
可以使用提供了XML解析器的任何语言以及支持HTTP协议的任何平台来编写Web服务客户。不过,你很可能会发现,.NET Framework中包括的工具使.NET应用程序成为了最佳选择。在本章中,你将学习如何生成一个代理类,它将自动处理Web服务通信,并允许任何.NET应用程序——包括Windows Forms、ASP.NET页面甚至控制台实用程序——访问Web服务,而不必担心底层的细节。
第四章:处理数据类型
在不同的语言、平台和操作系统之间共享数据带来了许多 新的问题和必须考虑的事项。本章深入讨论了Web服务数据类型以及如何对它们编码。你将了解到哪些可以作为Web方法参数或者返回值发送,以及如何使用数组、DataSet、XML节点以及自定义结构。我们还将深入讨论.NET的XML序列化结构,你将学习自定义的数据整形(shaping)。
第五章:管理状态
对无状态程序与有状态程序的优越性的争论一直都存在着,.NET Web服务也是如此。本章将讨论Web服务为什么不支持属性过程,并探讨导致许多状态维护Web服务类失败的艰难现实。我们将考虑客户端和服务器端的状态选项,从ASP.NET状态服务到自定义的cookie。我们还将讨论如何使用令牌来跟踪自己的轻量级会话,并将它们与SOAP标题结合,以便提供一个优秀的解决方案,用于必须维护一些基本信息的情况。
第六章:异步服务
.NET使Web方法的工作方式就像普通的本地函数一样,本地函数在默认情况下就是同步的,并在允许继续执行之前等待响应。虽然这是默认的行为,但是没有什么理由让它来决定你如何在成熟的应用程序中使用Web服务。本章展示了如何取消这种要求并解放你的代码,使用一般的优化模式来使你的客户更有效。这些技术包括同时调用多个方法、使用回调和事件通知以及创建多线程客户。我们还将讨论如何创建这样的Web方法:创建一个异步组件,让它开始工作,然后立即返回。这允许你实现一些高级技术,如自动进度跟踪和批处理。
第七章:缓存和分析
为了创建一个成功的Web服务,需要在编写代码时考虑到性能。本章展示了使用输出缓存加速访问,使用数据缓存替代或补充状态管理的最佳方法。我们还将讨论如何使用性能计数器并分析.NET Web服务。这允许你在部署Web服务之前就了解到所尝试的性能增强的结果。
第八章:调试、追踪和日志
从程序员的角度来看,.NET Web服务可能与传统的类相似,但是它们不能引发普通的.NET异常。本章将讨论如何控制错误,并使用特殊的SOAP异常通知客户。你还将学习如何使用Visual Studio.NET的集成调试器、如何在多项目Web服务解决方案中使用其著名的单步执行,以及如何对自动日志和追踪使用.NET Framework服务。本章最后介绍了SOAP扩展以及一些示例代码、这些代码展示了如何使用自定义扩展来检查.NET的对象层,并分析或记录发送的原始SOAP消息。
第九章:安全性和认证
Web服务标准目前没有提供任何集成的安全机制,但是你有无数个选择,从传输层安全到IIS认证、到ASP.NET自己的认证服务。在本章中,你将学习怎样才能保护Web服务——更重要的是,哪些技术最合适。
第十章:发布和发现
现在,你已经创建了完美的Web服务,怎样才能让别人了解这一点呢?本章将讨论一些允许客户获得他们需要的Web服务的技术,包括从简单的DISCO文件到在线Web搜索引擎和UDDI注册服务(让企业共享有关其内部处理的细节)的所有技术。我们将讨论使用DISCO文件 的静态和动态发现机制,DISCO文件将Web服务合并到简单的组中。我们还将讨论UDDI注册服务、如何使用它注册企业和添加服务、并考虑它是否已经准备好投入使用了。
第十一章:互操作性
本章重点讨论服务互操作性,讨论在SOAP实现之间可能出现的互操作问题以及目前做了哪些工作来消除SOAP实现中的差异。本章还介绍了你可以采取的一些简单措施,以确保.NET Web服务对其他实现方式来说是可访问的。
附录一:名称空间快速参考
这个附录提供了System.Web.Service名称空间中的主要类的一份按字母顺序排列的参考资料。
附录二:Web服务技术
这个附录提供了一个列表,按类别列出了一些最常提到的Web服务标准和技术,以及到何处查找更多的信息。