应用 .NET:使用 C# 开发面向大众的软件






2.44/5 (5投票s)
2001年11月4日
29分钟阅读

114448
《应用.NET》阐述了如何使用 C# 开发多个 .NET 应用程序。
![]() |
|
面向大众的软件
互联网已将软件带给了大众。有史以来第一次,世界各地的普通人正在使用软件相互连接。随着互联网连接进入电视、广播、电话、个人数字助理(PDA)技术和汽车领域,这一趋势必将持续。此外,人们的生活正成为软件的主要焦点——无论是通过网页用户界面进行的人际互动直接实现,还是通过旨在满足人类需求的 B2B(企业对企业)通信间接实现。民众通过软件的连接日益紧密,加之软件更加专注于服务大众,这正在彻底改变软件设计。
过去的软件专注于模拟事物的运作,这催生了面向对象的运动。尽管今天人们可以被看作是面向对象世界中的又一个对象集合,但这种方法不切实际,很可能会失败。我们根本没有可行的方法来使用面向对象的设计来模拟社会中动态的互动和力量。社会互动涉及自由的使用、多元文化偏好、移动性、不可预测性和地理位置等问题,这仅是其中的一小部分。简而言之,社会无法用对象模型的抽象来充分表示。正如哲学家卡尔·沃伊蒂瓦(更为人所知的名字是教皇约翰·保罗二世)多年前指出的那样,人的真实世界与物的世界截然不同:
我们生活的世界由许多物体组成……作为一个客体,人是“某个人”——这使他区别于可见世界中的任何其他实体,后者作为一个客体永远只是“某个东西”。在这种简单、基本的区别中,隐含着人与物的世界之间的巨大鸿沟。1
由于人是独一无二的对象类型,并且他们的活动正成为软件开发的中心焦点,一种新的编程愿景正在出现,它以更专业的方式针对人们复杂的动态交互性。
.NET 平台是这种面向大众的新编程愿景的早期体现。有必要理解这种编程愿景的要素,以充分利用 .NET 的能力。在人们从 C 语言的面向过程编程迁移到 C++ 语言的面向对象编程的时代,很容易犯下一个错误,即试图采用新工具而不理解其旨在解决的范式转变。一些人错误地将 C++ 仅仅看作是 C 的一个更好版本,而不是一种全新的软件编写方式。同样,今天的 .NET 可能被错误地看作仅仅是构建网站的更好方法,而不是下一代互联网的赋能技术。为了防止这种误解,本章的其余部分将探讨用于构建下一代互联网的面向大众的编程范式,以及如何使用 .NET 平台实现该范式。
互联网正在演变成什么,.NET 将如何提供帮助?互联网的成功与人是社会性动物这一事实息息相关。我们迅速接纳促进沟通的创新,正如印刷机、广播和电视的成功所证明的那样。互联网正在满足的主要需求是人们参与社区的愿望——一个全球范围的在线社区。这个全球在线社区自然地被细分为无数个更小的社区,这些社区以更个性化的方式针对特定群体。下一代互联网将使用 .NET 等技术发展,将通过经济、社会和文化互动更完整、更无缝地连接人们。
构建一个能充分代表社会的在线社区是一项复杂的工作。尽管为了实现真正无处不在的互联网,速度和无线连接的巨大改进是必要的,但工程师面临的最大挑战是克服软件方法的不足。需要更复杂、更强大的软件工具和技术来应对现有的艰巨工程任务。一旦有了适当的方法、工具和标准,一个全球在线社区就可以从数百万人的独立行动中涌现出来。没有正确的工具、标准和方法,进展将非常缓慢,我们会走很多弯路。
面向大众的范式
将万维网转变为一个更具全球连接性的社区需要什么样的软件方法论?《深入解析微软 Windows NT 互联网开发》第一部分² 介绍了一种面向大众的编程范式来解决这个问题。面向大众的范式侧重于通过互联网以更直接的方式连接人们,并将软件嵌入社会运作中,以便在线社区得以形成。与其他已经改变软件行业的范式转变(如面向过程和面向对象编程)不同,面向大众的编程不专注于创建像 Java 这样的新编程语言。相反,它侧重于利用像 Windows 服务器这样的现代操作系统提供的丰富服务。
互联网革命代表了社会行为方式的巨大转变,因此它必然代表了软件用途的巨大转变——一种范式转变——从专注于个人计算任务的技术转向专注于社会互动、文化表达和信息交换的技术。从本质上讲,为互联网设计的软件将负责构建一个全球社区。它将专注于改善日常生活的环境,使人们能够更有效地完成日常活动。因此,你可以恰当地称这种新范式为“面向大众的编程”……尽管 ActiveX 和 Java 都为互联网发展做出了宝贵的贡献,但它们本身不足以满足互联网时代的需求。为了快速构建可靠、可扩展的分布式软件解决方案,我们需要将 ActiveX 和 Java 嵌入到支持互联网的系统中。这正是 Windows NT 服务器平台技术所提供的。Windows NT 和微软 Windows 分布式网间应用架构(Windows DNA)为实现面向大众的编程提供了工具。³
这一指导原则最初在 Windows DNA 中实现,在微软的下一代 .NET 平台中得到了更全面的体现。.NET 平台包含了 Windows DNA 丰富的系统服务,并将其扩展,允许创建面向大众的 Web 服务,这些服务可以通过互联网以复杂和个性化的方式使用。尽管 Windows DNA 侧重于满足诸如互联网连接、事务、异步编程、容错、安全性和可伸缩性等基础要求,但 .NET 平台解决了对面向大众的 Web 服务的需求。这些 Web 服务将使人们能够更无缝地将软件集成到他们的生活中。例如,人们将能够以标准化的方式查看他人的日程安排,或在客户和供应商之间整合业务流程。在过去几年中,对大众的关注在软件行业变得越来越重要,并且它早于 .NET 平台。1999 年 3 月 29 日,微软宣布其公司已经重塑。微软打算涵盖一个更广阔的新愿景,即通过卓越的软件——在任何时间、任何地点、任何设备上——赋予人们力量。微软董事长兼首席软件架构师比尔·盖茨解释了公司更面向大众的观点:
我们最初的“每张桌子上和每个家庭都有一台电脑”的愿景仍然非常重要。展望未来,我们的愿景更为广阔。我们看到了一个世界,人们可以使用任何计算设备,在任何时间、任何地点做他们想做的任何事情。个人电脑将继续在这一未来中扮演核心角色,但它将与各种极其丰富的数字设备一同接入互联网的力量。我们希望赋予人们力量、连接性和选择权,让他们决定如何在生活中使用计算。⁴
.NET 平台将促进创建更加面向大众的软件,因为它直接实现了面向大众编程范式中体现的三个概念:
- 通用化,
- 协作,以及
- 转换。
通用化
通用化是一种开发模型,它利用了实现了普遍接受的互联网标准的复杂通用运行时的能力。
通用化模型依赖于运行时来提供广泛适用于解决复杂软件工程任务的系统服务。虽然像 C 或 C++ 这样的编程语言具有强大的功能并且也有运行时库,但为面向大众的编程提出的运行时在其功能上要丰富许多个数量级。面向大众的编程不专注于封装、多态或继承等编程技术来编写可重用代码,而是专注于重用无处不在的运行时的服务,以便最大限度地减少代码创建,并将编码工作更多地用于开发面向大众的 Web 服务,以构建在线社区。
编程的焦点从编程语言的内在能力转移到运行时的内在能力。Windows Server 是一个实现通用互联网标准并在其组件对象模型(COM+)服务层中提供非常丰富功能的运行时的例子。PocketPC 也是一个实现通用互联网标准的运行时的例子,但它的服务规模较小,更适合其运行的设备。.NET 运行时更优雅地表达了这一模型,我们将在本章后面解释。
协作
协作是一种协同模型,其中面向大众的 Web 服务相互合作以提供增强的服务。
协作模型促进了跨组织边界的更复杂的软件集成。面向大众的 Web 服务是任何通过互联网公开可编程接口(而不是图形用户界面)的应用程序,其目的是使开发人员能够构建在线社区。这些 Web 服务在零售行业的例子包括产品和配件目录、计费和支付处理服务,以及运输和交付服务。通过以编程方式将这些 Web 服务绑定在一起,全球各地的软件开发人员可以协作创建市场,在这些市场中识别和匹配数百万企业和消费者的需求。
实现这一壮举的软件工程挑战是巨大的。需要目录来识别可用的 Web 服务,并描述开发人员如何将其他服务与它们集成。人们需要就类似类型服务的 Web 服务描述合同达成共识,以避免在集成多个服务提供商时出现过度复杂性。测试和故障排除将需要程序员在开发和运营阶段与多个 Web 服务提供商轻松协作的方式。
转换
转换是一种互操作性模型,它解决了异构平台之间以及不同服务描述合同之间的功能转换问题。
转换模型提供了一种在一个极度多样化的环境中创建虚拟一致性的方法。构建一个在线社区需要一种无缝的方式,让成千上万的 Web 服务相互通信。这不是一项容易的任务,因为有数百万的软件开发人员使用不同的技术独立地构建这些类型的服务。互联网是一个由异构基础设施组成的网络,运行着许多不同的操作系统,并使用不兼容的组件协议,如分布式组件对象模型(DCOM)、通用对象请求代理体系结构(CORBA)和远程方法调用(RMI)。
将所有这些系统迁移到一种通用技术是不可行的。相反,面向大众的编程专注于转换技术,允许不同的系统通过无处不在的互联网标准(如超文本传输协议(HTTP)和可扩展标记语言(XML))进行通信。面向大众的 Web 服务可以用任何编程语言在任何平台上构建。在内部,服务可以使用专有协议以实现最大的可伸缩性,而外部接口可以在专有接口和无处不在的互联网标准之间来回转换。转换模型还有另一个同样重要的目标。很可能多个 Web 服务提供商会提供相同类型的服务,但使用不同的描述合同来指示如何以编程方式与该类型的服务集成。对于软件开发人员来说,试图适应所有这些不同的服务描述合同将是一项相当复杂的任务。转换模型需要工具和技术来促进将所有描述合同映射到消费系统所理解的通用格式的方法。
一种 .NET 方法
第一个版本的 .NET 平台在帮助软件工程师构建促进通用化、协作和转换的面向大众的系统方面取得了长足的进步。虽然像 Sun ONE 这样的其他竞争技术也可以用来代替 .NET 来实现这些原则——而且未来可能会出现其他新技术——但以下分析的目的是举例说明 .NET 如何促进面向大众的软件的开发。本书的其余部分提供了更全面的分析。
.NET 与通用化
未来的互联网将比今天的互联网更加无处不在和强大,人们将通过自然界面进行交互。互联网将是一个高带宽的全球网络,传输数据、语音和视频,连接全球数十亿的计算机、电话、收音机、电视、PDA 和汽车。
无线连接将变得快速且经济实惠,有可能取代有线线路成为最主要的互联网接入方式。许多新的互联网设备将会出现,它们将连接冰箱、门、窗、空调和安全系统等家居用品。一次性互联网设备将变得司空见惯,人们可以穿戴、邮寄并轻松更换它们。数据将可以普遍访问,并且通常不会与某个互联网设备绑定。虽然生物识别技术将增强安全性,但安全和隐私将始终是难题。使用互联网卡的金融交易将变得普遍,在线购物和实体店购物之间的界限将变得模糊,因为两者之间的主要区别将是配送或自提。将会有更新、更自然的通过互联网进行交流的方式。手写识别、语音识别和通过摄像头的视觉识别将使人们忘记有一个复杂的技术基础设施正在让他们能够轻松地在网络上交流。希望软件开发人员也能够通过通用运行时和普遍接受的互联网标准的服务忘记这些复杂性。
.NET 平台通过称为公共语言运行时(Common Language Runtime)的通用运行时来推进这一目标。该运行时在操作系统之上运行,管理代码的执行,并提供服务以简化开发过程。针对该运行时的源代码称为托管代码;编译器将其转换为独立于中央处理单元(CPU)的微软中间语言(MSIL)。在代码执行时,即时(JIT)编译器将此 MSIL 转换为其运行设备所需的特定于 CPU 的代码。理论上,这意味着软件开发人员可以为运行时编写代码,而无需针对其可能运行的每个 CPU 架构。随着新的互联网设备基于廉价的商品 CPU 构建,这将成为一个日益重要的问题。虽然 .NET 运行时将可用于每个版本的 Windows 操作系统,但 .NET 也可能被移植到其他操作系统,如 Linux。为了更容易地与不同平台上的替代通用运行时进行互操作,.NET 运行时使用通用的互联网标准,如 HTTP、HTTPS、XML 和简单对象访问协议(SOAP)来实现机器间通信服务。
.NET 运行时为许多今天通过不同应用程序接口提供的服务公开了一个统一的编程模型。有通用库,如 WIN32 应用程序编程接口(API)、微软基础类(MFC)、活动模板库(ATL)和 WinInet;更专业的库,如 DirectX、微软电话应用程序编程接口(TAPI)、CrypoAPI;以及一整套用于组件服务(如事务处理、队列组件或对象池)的 COM 接口,这些都是开发复杂软件所必须学习的。软件开发人员必须吸收来自许多来源的许多 API——有些重复相同的功能,有些针对不同的编程语言——才能有效地利用像 Windows DNA 这样的架构。.NET 运行时将大部分这些 API 整合到一个更简单的统一模型下,该模型抽象了许多细节,特别是可互操作的 COM 底层。未来,软件开发人员将能够主要专注于 .NET 运行时,而无论使用哪种编程语言。例如,.NET 中的消息队列组件可以轻松地将基于消息的通信集成到应用程序中,以执行诸如发送和接收消息、浏览现有队列或创建和删除队列等任务。运行时对 HTTP 1.1 的实现使开发人员摆脱了诸如流水线、分块、加密、代理使用以及证书和身份验证机制(如 Basic、Kerberos 或 Windows NT 挑战/响应(NTLM))等复杂任务。
许多简化开发过程的强大新功能已被整合到 .NET 运行时中。这些包括通过通用类型系统(CTS)实现的跨语言集成,通过使用程序集简化的版本控制和部署,通过可扩展元数据实现的自描述组件,通过自动垃圾回收实现的更简便的生命周期管理,简化的组件交互模型,以及改进的调试和分析服务。
.NET 运行时引入了一个名为 AppDomain 的新实体,它可以极大地促进可伸缩性设计,这是连接数十亿设备时的一个主要问题。在高性能系统的设计中,可伸缩性和容错性之间通常存在一场拉锯战。新组件被分区到应用程序内的不同进程空间中,以防止未发现的错误通过内存访问冲突等问题导致整个系统崩溃。然而,跨进程通信会显著降低应用程序的可伸缩性,因为需要额外的代码执行以及在封送期间由于堆上的内存分配而导致的处理器序列化。在 .NET 架构中,托管代码受到保护,不会在运行时引起许多典型的故障。任何可能导致的负面后果也可以被限制在有问题的 AppDomain 内。这允许软件架构师将代码执行分区到同一进程空间内的多个 AppDomain 中,以避免昂贵的跨进程通信。最终结果是一个更具可伸缩性且同时实现容错的系统。
安全是决定互联网演变为一个复杂的在线社区的另一个关键因素。人们不会将敏感的业务操作连接到网络上,除非他们确信他们的交易是安全的。.NET 运行时提供了代码访问能力来帮助解决其中一些问题。移动代码是一个巨大的危险,因为它可能来自许多来源,例如电子邮件附件或从互联网下载的文档。利用互联网软件应用程序中已知的漏洞,如缓冲区溢出,是另一种常见的攻击方法。代码访问安全有助于保护计算机系统免受这些类型的攻击,因为它允许根据代码的来源及其预期目的,以不同程度信任代码。这种机制并不能阻止所有移动代码的执行,而是限制了代码能够做什么。这种限制的程度可能取决于代码是否已由受信任的来源进行了数字签名。代码访问安全还可以降低其他合法软件被恶意代码利用缓冲区溢出或其他漏洞滥用的风险。这是通过指定合法代码被允许执行的操作集以及它永远不应被允许执行的操作集来实现的。
.NET 运行时是一个不断发展的平台,随着新兴在线社区需求的扩大,它将继续得到增强。可以预见,在通用运行时的后续版本中将加入诸如自然界面等附加功能。这些新功能将通过相同的统一编程模型公开。
.NET 与协作
构建一个全球连接的在线社区在理论上比在实践中容易得多。所需的协作水平非常难以实现,特别是考虑到将要参与的不同行业中存在的竞争力量。然而,今天互联网以其现有形式的存在表明,当通过协作产生的机会超过保护专有利益的优势时,达成共识是可能的。在未来几代互联网中,哪些类型的理想应用将成为可能?
这是一个巨大的话题,所以我们只关注一个电子商务的例子。假设每个产品和服务都有一个全球唯一的标识符。你在购物中心或超市购买的每样东西都编码有这个标识符,并且可以通过家中、车里或 PDA 中随时可用的扫描仪进行扫描,所有这些设备都连接到互联网。再假设有面向大众的 Web 服务,它们能识别你的身份并为你提供个人存储。每当你购买任何东西时,该物品都会被扫描,你的个人库存就会更新。每当你消耗一个物品时,你扫描它,你的个人库存就会减少。在你为库存设置了个人偏好后,自动化软件代理将定期检查你的数据,以确保你的家庭用品总是得到补充。如果你啤酒快喝完了,自动化软件代理将从你当地的商店订购更多,你下次去的时候可以取货。或者,自动化代理可以使用其唯一标识符搜索该商品的当前价格,并从更便宜的商店订购额外的供应品,后者会送货上门。每个月,你的自动化代理都会生成一份它为你购买的物品的报告,提供可能对你有利的替代购买模式的比较分析。例如,你的代理可能会告诉你,如果你购买 X 品牌而不是 Y 品牌,你将节省一定金额,或者如果你储备两个月供应量的 X 产品,你将通过批量采购省钱。每个月,自动化代理都会向你展示一份你账户的财务摘要,并请求你批准自动支付账单。
每个产品供应商也可以有代表其工作的自动化代理。通过分析以前的购买模式,供应商可以更准确地预测其商品所需的库存水平。这些可以用来自动从制造商那里订购额外的供应品,而制造商又可以依赖自动化代理来适当地储备原材料。每当有不可预见的事件打破传统的购买模式时,生产可以迅速做出调整,多余的供应品可以以折扣价提供给自动化代理。最终结果是一个精细调整的系统,最大限度地减少了浪费,并有效地将供应与需求相匹配。
.NET 如何帮助软件开发人员构建这类系统?只有当有办法通过网络以编程方式协作多家公司的服务时,构建这些系统才有可能。需要开发大量的 Web 服务,以明确定义的方式公开业务功能。.NET 平台使用普遍接受的标准,极大地简化了这些 Web 服务的创建。运行时提供了所有必要的底层支持,而像 Visual Studio.NET 这样的开发工具则提供了创建 Web 服务应用程序骨架的向导,这些骨架可以用特定功能进行增强。.NET 平台通过多个命名空间公开其功能,这里我们只提及其中几个。
System.Web.Services 命名空间包含了使用户能够构建和使用 Web 服务的类。使用此功能可以非常简单。例如,要使在 ASP.NET 中运行的公共类的方法可以通过互联网访问,用户只需在其定义中添加 WebMethod 属性。System.Web.Services.Protocols 命名空间包含了定义 Web 服务客户端与 Web 服务本身通信期间跨网络传输数据所用协议的类。它公开了 HttpClientRequest 和 HttpServerResponse 等方法,并提供了通过 HTTP 与 SOAP Web 服务通信的实现。
System.Web.Services.Description 命名空间由一些类组成,这些类使您能够通过服务描述语言公开描述 Web 服务。当在 Visual Studio 中创建 Web 服务时,会自动生成服务描述合同。Web 服务的消费者使用此合同来了解如何与其通信——也就是说,它可以调用的方法、输入参数以及可能返回的响应的确切格式。Web 服务描述语言(WSDL)已成为以这种方式描述 Web 服务的实际上的 XML 互联网标准。System.Web.Services.Discovery 命名空间由一些类组成,这些类允许消费者定位可用的 Web 服务。Web 服务发现是了解可用 Web 服务的存在并询问其描述合同以便用户可以正确与之交互的过程。
通用发现、描述和集成(UDDI)项目(http://www.uddi.org)旨在通过一个分布式的 Web 服务目录为 Web 服务集成提供一个框架。该目录允许用户在一个行业或特定公司内定位可用的 Web 服务。.NET 平台支持使用各种预定义的 SOAP 消息进行 Web 服务的编程注册和发现。UDDI 和 WSDL 标准是 IBM、微软和 Ariba 之间合作的产物,并得到了 30 多家其他软件公司的支持。
许多 Web 服务将通过绑定和扩展其他 Web 服务来构建。一些基础性的面向大众的 Web 服务可能会像商品一样出现。数据存储 Web 服务可以让人们将他们的信息安全地存储在一个可普遍访问的位置。访问这些数据的方法必须考虑到用户互联网连接的速度,并允许可以稍后同步的离线更新。虽然数据可能以 XML 格式存储,但用户应该能够使用 Microsoft Office 应用程序来查看和修改它。将需要一个身份 Web 服务,以允许单点登录到多个互联网服务。微软的 Passport 服务今天就提供了这种功能。更复杂的功能,如生物识别技术,可能会在以后添加。用户将需要通知和消息传递 Web 服务,将信息推送给人们或他们的软件代理,例如股价更新或新闻头条。还需要在线日历服务,以使人们或代理能够协作安排约会和会议。日历服务应该使用户能够设置授权或禁止访问的权限。例如,用户可能会给予重要客户访问权限,并拒绝未经邀请的销售会议请求的访问。.NET 平台和相关的 Web 服务是不断发展的系统,将始终在更新和改进。很可能会出现一种动态交付服务,允许用户在改进发生时自动接收。
将 Web 服务绑定在一起将给软件开发社区带来有趣的挑战。软件开发过程需要演变,以涵盖协作开发的特殊性。开发人员如何测试和调试集成了他们无法控制的多个实时系统的应用程序?如何为它们配备诊断信息并有效地管理它们?如何防止由于意外情况(例如消费者在紧密循环中重复调用 Web 服务)而导致的拒绝服务场景?如何在多个 Web 服务之间跨越事务,以便在发生错误时自动回滚更改?尽管 .NET 平台是促进协作开发的一个很好的第一步,但仍有许多问题需要解决。
.NET 与转换
截至 2001 年 8 月,.NET 平台仍处于测试版。尽管互联网已将全球数百万台计算机连接起来,但运行 .NET 软件的计算机还不到百分之一的极小部分。网络上计算机之间的通信水平很低,主要局限于信息的呈现和点击式的买卖。尽管像 XML、SOAP、WSDL 和 UDDI 这样的标准已经出现以促进协作式 B2B 通信,但目前可用的系统实现并不多。
今天,互联网的主要粘合剂仍然是 HTML,它已被应用于电子商务等非表示性任务。HTML 取得了巨大的成功,因为它易于实现,并在 wildly heterogeneous 的互联网环境中作为许多不同类型系统的通用转换语言。尽管几乎所有连接到互联网的计算机都理解传输控制协议/互联网协议(TCP/IP)和 HTTP 等互联网协议,但这些协议限制了它们之间可以发生的通信和协作水平。
解决这个问题的一种方法是让每个人都采用一种通用技术或新的编程语言,如 C#,以提供更好的服务。然而,考虑到软件行业中存在的竞争力量,这并不现实,也不可取,因为它会扼杀未来的创新。一种转换方法将允许更大的灵活性和表达自由。
如果 Web 要演变成一个更具全球连接性的在线社区,就需要新的转换机制,以实现人与人之间更丰富、更复杂的软件交互。仅仅拥有普遍接受的协议是不够的;用户还需要简化其实现的平台和工具。.NET 平台将在两个主要方面帮助满足在线社区的转换需求:系统互操作性和服务合同转换。
系统互操作性
尽管互联网通信仍然相当初级,但许多复杂的业务流程已经计算机化。已经有大量的软件工程成果可以用来构建在线社区。其中大部分由于使用了专有和不同的软件协议而被锁定在公司内部。.NET 平台可以帮助公司解锁这些丰富的资源,并将其暴露在网络上。软件开发人员可以构建作为现有系统转换层的中间 Web 服务,也可以将一些遗留代码移植到 .NET。 .NET 平台内的 CTS 通过处理不同语言使用的不兼容通用数据类型、跨语言集成能力以及处理事件、动态行为、持久性、属性和异常的标准化方式,促进了更轻松的代码移植。.NET 的 Web 服务实现是基于 XML 的,可以被任何语言、组件模型或操作系统访问,因为它不与特定的组件技术或对象调用约定绑定。这意味着许多不同的公司可以独立构建能够互操作的 Web 服务,而无需事先就系统级实现细节达成一致。.NET 架构使用简单且可扩展的 SOAP 协议在互联网的异构性中交换信息。SOAP 是一种基于 XML 的协议,它不定义任何应用程序或实现语义,可以用于从异步消息传递到远程过程调用的各种系统中。
.NET 平台中的 Web 表单也简化了 HTML 的生成,HTML 作为表示信息的转换机制。使用 Web 表单,用户可以通过将丰富的用户界面控件拖放到设计器上来创建网页,然后添加代码以使用任何编程语言将这些组件以编程方式绑定到业务层。.NET 平台会将所需的表示转换为纯 HTML,任何设备和操作系统上的浏览器都能理解。
合同转换
希望利用协作在网络上开展业务的公司面临的最大挑战之一,将是就行业特定的 Web 服务描述合同达成共识。将会有许多合同服务于相同的目的,但在格式上略有不同。例如,可能会有数百种采购订单合同类型;如果没有适当的转换技术,程序员可能会面临试图迎合每一种采购订单合同变化的噩梦般的任务。为了简化这些复杂性,用户需要一种简单的方法将不同的 Web 服务合同转换为消费 Web 服务所期望的通用格式。幸运的是,可扩展样式表语言转换(XSLT)规范以标准化的方式解决了这个问题。XSLT 是一种将 XML 文档类型转换为其他 XML 文档类型的语言。用 XSLT 表示的转换描述了将源树转换为结果树的规则,这是通过将模式与模板关联来实现的。.NET 平台通过 System.Xml 命名空间中支持的类实现了 XML 文档对象模型(DOM),该命名空间还将 XML DOM 与 ADO.NET 提供的数据访问服务统一起来。.NET System.Xml.Xsl 命名空间实现了万维网联盟(W3C)的 XSLT 规范。XslTransform 类可以使用 XmlReader 加载 XSL 样式表,并使用 XmlNavigator 转换输入数据。
.NET 平台提供简便的系统互操作性和服务合同转换机制的能力,是 Web 向复杂的在线社区演进的一大步。我们可以期待这些能力也会出现在其他技术和平台中,以便所有互联网系统都能以更强大的方式更容易地集成。
结论
互联网改变了软件开发的规则,并催生了面向大众的软件范式的出现,该范式旨在将互联网转变为一个能充分代表社会的在线社区。通用化、协作和转换是面向大众范式中提出的三个原则。将 Web 转变为一个复杂的在线社区已经开始,许多开发人员已经在构建具有本章概述的面向大众特征的软件。然而,今天开发人员正在手工完成所有的底层工作,并逐个实现互联网标准。.NET 框架将提供所需的工具,使软件的通用化、协作和转换更容易实现,从而更有效地将 Web 转变为一个真正的、世界范围的在线社区。
- Karol Wojtyla (Pope John Paul II). Love and Responsibility, trans. H.T. Willetts (New York: William Collins Sons, London, and Farrar, Straus and Giroux, 1981), 21. The ethical principles established in Love and Responsibility could be applied to the social aspects of the Internet's impact on society at large. (卡罗尔·沃伊蒂瓦(教皇约翰·保罗二世)。《爱与责任》,H.T. Willetts 译(纽约:William Collins Sons,伦敦,和 Farrar, Straus and Giroux,1981年),第21页。《爱与责任》中建立的伦理原则可应用于互联网对整个社会影响的社会方面。)
- Ronan Sorensen. Inside Microsoft Windows NT Internet Development (Redmond, WA: Microsoft Press, 1998), 5. Used with permission. (Ronan Sorensen。《深入解析微软 Windows NT 互联网开发》(华盛顿州雷德蒙德:微软出版社,1998年),第5页。经许可使用。)
In December 1999, Pearson PTR, Slashdot.org, Netscape's DevEdge Online, and Doctor Dobb's Journal asked readers to nominate the books that have had the biggest impact on computer technologies to date-the books that stand dog-eared next to computers and are ready to tackle the next challenge-the books that stand the test of time and whose value extend into the years to come. Inside Microsoft Windows NT Internet Development was ranked fourth in this Best Computer Books of the Twentieth Century contest. (1999年12月,Pearson PTR、Slashdot.org、Netscape 的 DevEdge Online 和 Doctor Dobb's Journal 邀请读者提名迄今为止对计算机技术影响最大的书籍——那些放在电脑旁、书页卷边、随时准备应对下一个挑战的书籍——那些经得起时间考验、价值延续多年的书籍。《深入解析微软 Windows NT 互联网开发》在这次“二十世纪最佳计算机书籍”竞赛中排名第四。) - Ronan Sorensen, Inside Microsoft Windows NT Internet Development, 10.(Ronan Sorensen,《深入解析微软 Windows NT 互联网开发》,第10页。)
- Microsoft press release ("Microsoft Announces Reorganization," 1999): http://www.microsoft.com/PressPass/features/1999/03-29reorg.asp. (微软新闻稿(“微软宣布重组”,1999年):http://www.microsoft.com/PressPass/features/1999/03-29reorg.asp。)