.NET开发平台研究(四)

** 8 ** ** . ** ** ASP.NET **

微软的 ASP.NET 对 Active Server Page ( ASP )进行了很大的改变,不仅使开发者更易于创建动态 Web 内容,还使他们更易于创建复杂而可靠的 Web 应用程序,例如 Web Services 。 ASP.NET 是微软的 . NET 开发平台的关键的一部分。为了微软 .NET 战略的成功,必须吸引开发者采用 . NET 开发平台,包括 ASP .NET 。 ASP .NET beta 版测试者报告了它的大量好处。

ASP. NET 的主要目标是降低 Web 应用程度开发的门槛,它采用与降低使用 Visual Basic ( VB )进行 Windows 编程难度大致相同的方法实现了这个目标:通过设计——“事件-驱动”编程模型,在此模型中开发者向一表单中填加控件,然后编写代码处理与这些空间相关的事件(例如,数据进入文本框或者单击鼠标)。由于允许开发者在由 .NET Frame 类库显示的 XML 支持上开发,这也使他们更易于创建以 XML 格式交换数据的 Service 。

** ASP.NET ** ** 在哪些方面补充了 .NET ** ** 开发平台? **

ASP.NET 是 .NET 开发平台的一个部件,用来开发驻留在微软的 Internet Informatio n Server ( IIS )上并且使用诸如 HTTP 和 SOAP 等 Internet 协议的 Web 应用程序。 ASP.NET 使两种类型的 Web 应用程序的开发和部署更为容易。

· Web 表单应用程序,包括用于动态内容的从脚本生成的 Web 页和向一个客户(例如浏览器)显示 UI 或表单的 Web 页两种。

· Web Services ,用于显示其他应用程序和“智能”客户端的功能,使应用程序可以交换信息。

两种 Web 应用程序体现了超出传统应用程序的一个主要的优点:它们使用基于 Internet 的协议使信息可以轻易地穿过组织边界(和防火墙)移动,如同在一个组织内移动一样。

微软以前试图使用 ASP ( 1996 年作为 IIS3.0 的扩展功能首先引入)来降低 Web 应用程序开发的门槛。 ASP 支持 VBScript 和 JScript ,以及一些可用于 Web 应用程序开发的简单对象,例如 Request 对象,允许开发者从客户端获得数据; Response 对象则向客户端发送数据。与以前的 IIS API (例如 Common Gateway Interface ( CGI )(通用网关接口)和 Internet Server Application Programming Interface ( ISAP )( Internet 服务器应用程序编程接口))相比, ASP 更易用于 Web 应用程序开发。使用 ASP ,一个有 HTML 和脚本使用经验的程序员可以轻松地开发动态 Web 内容。

尽管如此,介于其有限的对象模型,有限的脚本描述语言能力,有限的用于端到端应用程序调试的工具,以及对于外部 XML 工具和分析程序进行 API 级调用的要求,开发一个功能强大且稳定的 Web 表单仍然十分困难。

通过在 .NET 开发平台中嵌入 ASP.NET ,微软将 CLR 和类库的益处提供给了开发者。 ASP.NET 使用 CLR 来编译代码,管理执行,创造了运行更快、表现更好的 Web 应用程序。此外, ASP.NET 使用类库让开发者更易于将 XML 格式数据合并到 Web 应用程序中,添加处理异常的代码,创建 UI 元素,并提供其他的编程功能。

ASP.NET 体系结构

ASP.NET 使开发者能够创建在 Internet Information Server ( IIS )和 .NET 开发平台上运行的 Web 应用程序。 ASP.NET 通过 Internet Server Application Programming Interfaces ( ISAPI )与 IIS 通信, Active Server Pages ( ASP )同样。事实上, ASP 和 ASP.NET 可以共存于同样的 IIS 服务器上: IIS 将对于 ASP 页面的请求(带有 .asp 扩展名)指向 ASP ,将对于 ASP.NET 页面的请求(带有 .aspx 或 .asmx 扩展名)指向 ASP.NET 。

ASP.NET 本身有一个 cache ,通过提供 cache 内的经常使用的页面来提高性能。 ASP.NET 还包括一个跟踪用户会话的状态管理 Service 。在 ASP 中,开发者通常不得不创建自己的 cache 和状态管理 Services 来扩大 ASP 所提供的。

.NET Framework Core 开发平台支持 ASP.NET 页面中的代码。特别地, Common Language Runtime ( CLR )编译和管理页面中代码的执行。类库提供了一个用于接收请求和生成响应的统一类集(例如 Web 表单类和 XML 类)。

** ASP.NET ** ** 的好处 ** ** : **

ASP.NET 在三个领域提供了超越 ASP 的改进:编程模型,状态管理,以及从 .NET 开发平台继承过来的好处。

事件—驱动编程模型

事件—驱动编程允许开发者创建一旦特定事件发生时就执行的代码。例如,在 ASP.NET 的情形中,当加载、卸载或单击页面上的控件时,一段特定的代码将执行。 ASP 使用线性代码处理模型,每条 ASP 代码线都掺杂了静态 HTML ,并且按照在 ASP 文件中出现的顺序加以处理。

事件—驱动编程使 ASP.NET 编程更接近于 Windows 编程。这样做的好处是开发者只需编写响应事件的代码,并且他们可以将事件—驱动编程的知识从 Windows 桌面应用程序扩展到 Web 应用程序上来。

事件—驱动编程的另一个优点是它可以使处理数据的代码与向用户显示数据的代码相分离。例如, ASP.NET 允许开发者使用一种称作“代码隐藏”的机制将 Web 应用程序逻辑(通常用 VB.NET 或 C# 开发)从表示层(通常采用 HTML 格式)中分离出来。通过将逻辑与表示相分离, ASP.NET 允许多个页面使用相同的代码,从而使维护更容易。开发者不再需要为了修改一个编程逻辑问题而浏览 HTML 表示, Web 设计者也不必通读所有代码来修正一个页面的 HTML 错误,(参看“ ASP.NET 代码隐藏”示意图)。

更好的状态管理

ASP.NET 给 Web 应用程序状态带来丰富的好处。状态管理涉及到跟踪每个人的会话数据,这是由用户在与 Web 站点发生交互时生成的独特的数据。例如,用户购物车内当前的产品信息,或者用户目前是否登录到了该站点上。

ASP.NET 解决了和状态管理有关的两个问题。第一个,如果 Web 服务器有问题,状态信息经常丢失;第二个,驻留在一个服务器组或者 Web 田上的 Web 站点上的状态信息难于管理。

和 ASP 一样,状态信息存在于 ASP.NET 正在其中运行的程序中。尽管这种方法提供了最好的性能,但也最缺少稳定性和可扩展性。如果服务器重启,保存的状态信息就会丢失,而进程中的状态管理不能提供给驻留在多个服务器的 Web 应用程序。

和 ASP 不同的是, ASP.NET 还可以使用一个用于进程外状态管理的 Windows Service ( ASPState )。尽管这比进程中状态管理稍慢,但是即使 ASP.NET 进程被重启,信息仍能保存下来,而且它也可以支持跨越 Web 田中多个服务器上的 Web 应用程序。

另一个状态管理的选择是让 ASP.NET 将状态信息保存在 SQL Server 上。这种方式确保状态信息能幸免于 Web 服务器上的问题,并且允许一个 SQL Server (大站点上的 SQL Server 簇)保存驻留在— Web 田中的几个服务器上的 Web 应用程序的状态信息。

从 .NET Framework 中受益

ASP.NET 使开发者用 .NET Framework 类库创建带有 UI 的 Web 页面更为容易。 .NET Framework 类库提供诸如文本和列表框,以及各种按钮等控件,开发者可以通过将标签(例如〈 asp: Button 〉)插入到他们的动态 Web 页面中来使用这些控件,或者也可以使用 Visual Studio.NET 的图形页面编辑器来添加控件。 ASP.NET 提供以下几种类型的控件:

· 现有 HTML 控件的服务器端版本,例如代表〈 input type=submit 〉的按钮( HTML Button )控件。现有的用于表单 的 HTML 与 ASP.NET HTML 控件之间的主要差别是“ runat=server ”属性,它表示代码在服务器上运行,而控件显示在客户端。

· Web 表单控件,这是服务器端控件,一些是 HTML 控件,另外一些则是新增的更为复杂的控件,例如文本框(

 1<asp:textbox> 、列表框、日历和数据网格等。这些控件比  HTML  控件更易于使用,因为诸如容量这样的属性在所有控件中均使用一致的方式设置。 
 2
 3·  确认控件,这是一种链接到  HTML  控件和  Web  表单输入控件(例如文本框)的控件。确认控件能够通过比较、检查输入范围或应用一个定制的确认代码来确认用户的输入。 
 4
 5所有这些控件都减少了开发者不得不编写的代码的数量,开发者只需把控件定位在一个页面中,初始化控件的性能和方法,然后编写代码来响应控件可能产生的事件,这种事件是用户某些行为(如单击按钮)的结果。这些控件还支持数据绑定,这使开发者很容易将从数据库取回的特定信息与指定给控制值关联起来。 
 6
 7相比之下,  ASP  仅仅提供了  6  个基本控件。尽管  ActiveX  控件能够由  ASP  使用,但这通常会削弱  Web  应用程序的稳定性。 
 8
 9另外,  .NET  开发平台的类库不仅使  Web  应用程序受益,同样也有益于任何  Windows  应用程序,这些助益如下: 
10
11减少了异常处理的编码。异常处理类使开发者可以很容易地添加代码处理公共编程问题,例如被  0  除,内存溢出,或是找不到文件等错误。 
12
13减少了用于数据交换的编码。通过使用类库,  ASP.NET  开发者可以方便地读写  XML  数据流。  ASP.NET  还可使用  ADO.NET  ,一套新的扩展的  Active Data Objects  (  ADO  )(活动数据对象),来管理指向数据库中的数据的连接,并且处理数据。 
14
15改进的性能。  ASP.NET  性能大大优于  ASP  ,这主要是因为以  CLR  为目标的代码是编译执行,而用于  ASP  的脚本语言则是解释执行。当代码第一次使用时,要被编译,起始页面加栽可能会慢些,但在随后的页面请求中,该页面将从动态输出缓存中的已编译过的代码中读出。当识别到缓存页面的控件事件或查询字符串的变化时,  ASP.NET  甚至能够专门缓存。甚至  ASP.NET  测试版看来也比  ASP  要快好多。(微软提供的比较,参看“  ASP.NET  性能”。) 
16
17增加的语言支持。  ASP.NET  允许开发者使用  CLR  支持的任何语言,包括  VB.NET  和  C#  。  ASP  仅仅支持  VBScript  与  Jscript  这样的解释型脚本描述语言。 
18
19改进的调试支持。基于  ASP.NET  的  Web  应用程序的开发者既可以使用包含在  .NET Framework SDK  中的调试器,也可使用集成在  Visual Studio  中的调试器。除了允许开发者逐步检查代码,设置断点外,  ASP.NET  还支持跟踪,它允许开发者跟踪一个应用程序的执行,然后观察跟踪结果。要排除  ASP  页面的故障,开发者不得不散布带有自定义的“  Response.Write  ”声明的代码,来显示应用程序中特定点的变量值。调试完后,必须将这些代码行清除或者注释掉,以便应用程序作为产品运行时,不会输出调试信息。可以轻松地设置跟踪开或关,并且既可同单独的  Web  页面也可同大范围的  Web  应用程序一起工作。 
20
21ASP.NET  性能 
22
23![](http://dev.csdn.net/Develop/ArticleImages/23/23442/CSDN_Dev_Image_2004-1-142221462.jpg)
24
25数据是基于  Doculab  的  Nile  的基准,它常常用于评估应用程序服务器的相关性能。实现  ASP.NET  的  Nile  基准需要  4,000  条  C#  代码,用来生成一个  ad-hoc  搜索的混合,创建新客户,管理购物车,以及处理定单等。保持硬件配置不变,通过对应用程序和数据库服务器的测试,得出如下结果:附加测试表明用  VB.NET  编写代码和用  C#  编写代码区别不大。 
26
27** 向  ASP.NET  ** ** 进发:  **
28
29ASP  和  ASP.NET  之间的差异导致  ASP  页面不可能在  ASP.NET  上运行。然而,一个单一的  IIS  服务器能同时驻留  ASP  应用程序  和基于  ASP.NET  的  Web  应用程序。 
30
31想利用  ASP.NET  的开发者有几种选择: 
32
33·  保留现有的  ASP  应用程序不动,在  ASP.NET  上开发新的应用程序。因为  ASP  和  ASP.NET  可以共存,也就不必迫切地将现有的应用程序转换到  ASP.NET  上,但是知道  ASP.NET  的重大优势,开发者也许不会再想开发任何新的  ASP  应用程序。 
34
35·  将  ASP.NET  特征添加到现有的  ASP Web  应用程序上。从原理上讲,开发者能够建立带有  ASP  和  ASP.NET  混合页面的应用程序,这使应用程序可以逐渐迁移到  ASP.NET  上。然而,状态管理还不能在  ASP  &lt;SPAN style="FONT-FAMILY: 宋体;</asp:textbox>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus