日期:2009-02-28  浏览次数:20442 次

  本文假定你已经熟悉了Web编程技术。

  摘要。Microsoft .NET Framework是用于构建集成的、面向服务的应用程序的新平台,这些应用程序可以满足当今企业的互联网需求,在这个平台上的应用程序可以众多的来源收集信息,并与这些来源交互,而不管理所使用的平台或语言如何。本文,两序列中的第一部分,例示了.NET如何使你通过任何编程语言快速地构建和部署Web服务和应用程序。微软中间语言和JIT编译器,它们使重用成为可能,在本文中进行了讨论,也介绍了管理组件,组合,和通用类型系统(CTS)。


  我喜欢在线购物,获得交通情况,比较产品,阅读产品评论。然而,我发现有很多我希望通过互联网做的事情在今天是不可能的。例如,不仅希望在我生活的地区找到提供特定烹饪风格的饭店,我还希望知道在某个特定的饭店今晚7点是否有位子。如果我有自己的企业,我就希望知道哪个供应商有特定商品的库存。如果多个供应商能提供该产品,我就希望知道哪个供应商价格是最好,哪个供应商能最快地交付产品。

  象这样的服务是不存在的,因为目前没有用于集成所有这些私有信息的标准。毕竟,供应商有他们自己描述其产品的方式。另外,开发集成这些服务所需的代码是困难的。


  微软对集成这样的服务的需求重新进行组织,也就不奇怪了。这了实现这个目标,微软选用了XML标准用于描述数据,并提供了一个新的开发平台基本架构,我相信,它能帮助开发人员创建和部署互联网时代的分布式应用程序。


  这个平台称为Microsoft? .NET Framework (.NET)。.NET比以往任何平台更允许开发人员充分利用技术。特别地,.NET将交付代码重用,代码规范,资源管理,多语言开发,安全性,部署和管理。在设计新平台时,微软也改进了现有平台的一些特性。在本文中,我将讲到这些改进。

  通用语言运行时和类库

  .NET提出了开发软件一个全新方式。你将注意到我不是说为Windows开发软件。这是因为.NET并不是限制到了Windows操作系统。在本文中,我将讨论.NET构架,描述它如何提供前面提到各种功效。
  .NET平台的核心是通用语言运行时和基本框架。所有程序员都熟悉这些概念。我相信,很多人至少使用C运行库,标准模板库,MFC库,活动模板库,Visual Basic?运行库,或Java虚拟机。实际上,Windows 操作系统本身可以被认为是一个运行引挚和库。运行引挚和库为应用程序提供服务,程序员喜欢它们是因为节省了时间,方便了代码重用。
  .NET基本框架允许开发人员访问通用语言运行时,并提供了很多高级服务,所以开发人员不必对同样的服务重复编码。更重要的是,在这个库之下的.NET通用语言运行时引挚提供了支持快速开发软件的技术。下面列出了一个由.NET通用语言运行时引挚提供的特点的小示例。
  一致的编程模型。所有的应用程序都通过通用的面向对象的编程模型提供,而今天一些操作系统功能通过DLL函数访问,而另一些功能通过COM对象访问,两者是不同的。
  简化的编程模型。.NET寻求最大程度的简化Win32? 和 COM所需要的管道和神密构造。特别地,开发人员不再需要理解注册表,GUIDs, IUnknown, AddRef, Release, HRESULTS等等。还需指出的是,.NET并不只是将这些概念从开发者那里抽走,在新的.NET平台中,这些概念根本就不存在。
  只要一次能运行,永远就能运行。所有的开发人员都熟悉"DLL 陷阱"。因为安装新应用程序的组件可能会覆盖了旧应用程序的组件,旧应用程序执行不可预知的行为,或者旧应用程序不再起作用,这就是"DLL 陷阱"。.NET体系架构分离了应用程序组件,这样应用程序总是调用为它建立和测试过的组件。如果应用程序在安装完成后能够运行,那么它将永远能够运行。这标志?quot;DLL陷阱"的终结。
  能在很多平台上运行。今天,存在许多不同类型的Windows : Windows 95, Windows 98, Windows 98 SE, Windows Me, Windows NT? 4.0, Windows 2000 (带不同的服务包), Windows CE,及很快会出现64位的Windows2000。这些系统大多运行在x86 CPU上,但Windows CE和64位的Windows运行在非x86 CPU上。一旦编写和建立了,管理.NET应用程序(包含了全部的管理代码,稍后我将解释)就可以在任何支持.NET通用语言运行时的平台上运行。甚至有可能将来会为非Windows平台构建一个通用语言运行时的版本。当用户需要支持多个计算机硬件配置或操作系统时,他们立刻会赏识这个可广泛执行的模型带来的价值。

  语言集成。COM允许不同的语言间交互操作。.NET允许语言与另一语言集成。例如,可以用C++创建一个从VB实现的类中派生的类。.NET使这种情况成为可能,是因为它定义和提供一个对所有.NET语言通用的类型系统。微软通用语言规范(在本文第二部分讨论)描述了为使一种语言与另一种语言集成在一起,编译器应如何去做。微软提供了多个编译器:带管理扩展的C++,C#(读作"C sharp"),Visual Basic(包含了VBScript和VBA),以及JScript?,它们生成的代码以.NET通用语言运行时为目标。另外,微软之外的公司也提供了语言编译器,它们同样以.NET通用语言运行时为目标。
  代码重用。使用我刚刚描述过的机制,你可以创建自己的为第三方应用程序提供服务的类。当然,这样做使得代码重用相当简单,并扩展了组件供应商市场。
  资源自动管理。你也知道,编程需要技术和纪律。对于资源管理,如文件,内存,屏幕空间,网络链接,数据库资源等等,来说,情况更是如此。最常见的一个错误是,应用程序忽视了对于这些资源的释放,使应用程序或其它应用程序在某个不可预知的时间里错误执行。.NET通用语言运行时自动跟踪资源的使用,确保你的应用程序永远不会发生资源泄漏。事实上,没有明确释放资源的方式。在以后的文章中,我将确切地解释其工作原理。
  类型安全。.NET通用语言运行时能验证你的代码是类型安全的。类型安全确保了总是能以兼容的方式访问分配的对象。因此,如果一个方法的输入参数被声明为接受4字节的值,那么运行时将检测并阻止把此参数作为8字节值的访问。相似地,如果对象占有10字节的内存,为了读取这个对象,应用程序不能把它强制转化为多于10个字节的形式。类型安全还意味着执行流只能传送到已知的地点(即方法入口处)。不能对内存位置创建任意的引用,这样就不会引起在该处的代码开始执行。同时,这样做减少了常见的编程错误和典型地系统攻击,如过度地利用缓存。
  丰富的调试支持。.NET通用语言运行时可用于多种语言,因此能很容易地将应用程序的各个部分由给最合适的语言来实现。.NET通用语言运行时完全支持跨语言边界调试应用程序。运行时提供了内置的可在堆栈间跳跃的应用,这样就很容易地对错误进行定位。
  一致的错误处理。Windows编程最令人烦恼的一件事是错误会以不同的方式发生。一些函数返回Win32错误代码,一些函数返回HRESULT类型,而一些函数抛出异常。在.NET中,所有的错误都通过异常-周期记录。异常使开发人员能将错误处理代码与完成工作所需代码分离开来。这大大简化了代码的编写、阅读和维护。另外,异常也能跨越模型和编程语言边界。
  部署。现在,基于Windows应用程序特别难于安装和部署。经常要建立很多文件,注册表设置和快捷方式,另外完全卸载应用程序几乎是不可能的。对于Windows2000,微软引入了新的安装向导,它将有助于解决这些问题,但编写过微软安装程序包(Microsoft Installer Package)的公司仍有可能不能正确地完成所有的事情。.NET使所有这些音量成为历史。.NET组件在注册表中没有参考。实际上,安装大部分基于.NET的应用程序只需要将文件拷贝到目录中,而卸载应用程序简单到删除这些文件即可
  安全性。传统的OS安全提供了基于用户帐号的隔离和访问控制。这被证实为是一个有用的模型,但在核心它假定所有的代码拥有相同的信任度。如果所有代码是从物理媒体(如光驱)或受信任的企业服务器安装的,那么这个假定就认为是正当的。但是,随着对移动代码(如Web角本,从互联网上下载的应用程序,电子邮件附件)依赖性的增加,对应用程序的行为需要作更细的控制。.NET代码访问安全模型,在第2部分将进行讨论,交付了这种控制。

  微软还认识到很多应用程序希望加强基于"角色"而不中独立的帐号的行为。微软最初通过微软交易服务器(MTS)支持了这种概念,后来通过COM+ 1.0版中进行了改进。在.NET中,微软支持对应用程序定义的角色和基于这些角色的访问控制的部署。这种机制现在扩展到了适用于互联网和不同的环境。
  可以想象,解决所有这些问题需要包括多个部分的结构体系。为了清楚的表明.NET框架,我将完整地开发和部署一个应用程序。第一步是决定建立