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 Information 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控件,另外一些则是新增的更为复杂的控件,例如文本框(<asp:TextBox>、列表框、日历和数据网格等。这些控件比HTML控件更易于使用,因为诸如容量这样的属性在所有控件中均使用一致的方式设置。
·确认控件,这是一种链接到HTML控件和Web 表单输入控件(例如文本框)的控件。确认控件能够通过比较、检查输入范围或应用一个定制的确认代码来确认用户的输入。
所有这些控件都减少了开发者不得不编写的代码的数量,开发者只需把控件定位在一个页面中,初始化控件的性能和方法,然后编写代码来响应控件可能产生的事件,这种事件是用户某些行为(如单击按钮)的结果。这些控件还支持数据绑定,这使开发者很容易将从数据库取回的特定信息与指定给控制值关联起来。
相比之下,ASP仅仅提供了6个基本控件。尽管ActiveX控件能够由ASP使用,但这通常会削弱Web应用程序的稳定性。
另外,.NET开发平台的类库不仅使Web应用程序受益,同样也有益于任何Windows应用程序,这些助益如下:
减少了异常处理的编码。异常处理类使开发者可以很容易地添加代码处理公共编程问题,例如被0除,内存溢出,或是找不到文件等错误。
减少了用于数据交换的编码。通过使用类库,ASP.NET开发者可以方便地读写XML数据流。ASP.NET还可使用ADO.NET,一套新的扩展的Active Data Objects(ADO)(活动数据对象),来管理指向数据库中的数据的连接,并且处理数据。
改进的性能。ASP.NET性能大大优于ASP,这主要是因为以CLR为目标的代码是编译执行,而用于ASP的脚本语言则是解释执行。当代码第一次使用时,要被编译,起始页面加栽可能会慢些,但在随后的页面请求中,该页面将从动态输出缓存中的已编译过的代码中读出。当识别到缓存页面的控件事件或查询字符串的变化时,ASP.NET甚至能够专门缓存。甚至ASP.NET测试版看来也比ASP要快好多。(微软提供的比较,参看“ASP.NET性能”。)
增加的语言支持。ASP.NET允许开发者使用CLR支持的任何语言,包括VB.NET和C#。ASP仅仅支持VBScript与Jscript这样的解释型脚本描述语言。
改进的调试支持。基于ASP.NET的 Web应用程序的开发者既可以使用包含在.NET Framework SDK中的调试器,也可使用集成在Visual Studio中的调试器。除了允许开发者逐步检查代码,设置断点外, ASP.NET还支持跟踪,它允许开发者跟踪一个应用程序的执行,然后观察跟踪结果。要排除ASP 页面的故障,开发者不得不散布带有自定义的“Response.Write”声明的代码,来显示应用程序中特定点的变量值。调试完后,必须将这些代码行清除或者注释掉,以便应用程序作为产品运行时,不会输出调试信息。可以轻松地设置跟踪开或关,并且既可同单独的Web页面也可同大范围的Web应用程序一起工作。
ASP.NET性能
数据是基于Doculab的Nile的基准,它常常用于评估应用程序服务器的相关性能。实现ASP.NET的Nile基准需要4,000条C#代码,用来生成一个ad-hoc搜索的混合,创建新客户,管理购物车,以及处理定单等。保持硬件配置不变,通过对应用程序和数据库服务器的测试,得出如下结果:附加测试表明用VB.NET编写代码和用C#编写代码区别不大。
向ASP.NET进发:
ASP 和ASP.NET之间的差异导致ASP页面不可能在ASP.NET上运行。然而,一个单一的IIS服务器能同时驻留 ASP应用程序 和基于ASP.NET的 Web应用程序。
想利用ASP.NET的开发者有几种选择:
·保留现有的ASP应用程序不动,在ASP.NET上开发新的应用程序。因为ASP和ASP.NET可以共存,也就不必迫切地将现有的应用程序转换到ASP.NET上,但是知道ASP.NET的重大优势,开发者也许不会再想开发任何新的ASP应用程序。
·将ASP.NET特征添加到现有的ASP Web应用程序上。从原理上讲,开发者能够建立带有ASP和 ASP.NET混合页面的应用程序,这使应用程序可以逐渐迁移到ASP.NET上。然而,状态管理还不能在ASP和ASP.NET之间分开,如果状态信息必须由ASP和ASP.NET页面共享,这就使得这种方法不切实际。
·把现有的ASP Web应用程序转换到ASP.NET。这需要开发者将现有的基于脚本的代码转换到VB.NET或C#,从ADO转换到ADO.NET,并且将事件驱动代码添加到应用程序之中。仔细检查现有的应用程序,确定有多少脚本代码嵌入在页面之中,并且考察ASP.NET的新的优势,如服务器端控件和事件模型,将说明这种方法是否有意义。
·使用现有的页面作为校验的规范,充分利用ASP.NET功能的优势,重建页面的表示和逻辑,改写现有的ASP Web应用程序,使之用于ASP.NET。这种方法花费的工夫可能最多,但是在应用程序的稳定性和性能方面可能会达到最
关键词:.NET开发平台研究(4)