日期:2013-09-10  浏览次数:20395 次

ASP.NET移植须知

统一教学网
日期:2001-11-5 9:05:00
出处:ZDNet.com.cn
作者:未知
虽然微软ASP.NET的设计人员在ASP 应用程序的向后兼容工作上做得相当出色,在致力于把Web应用程序从ASP迁至ASP.NET的时候,有几点需要特别注意。切实理解由.NET平台改变或引入的技术及ASP.NET,会使移植过程变得相对简单。

为增进您对如何使ASP应用程序在ASP .NET 环境中顺利运作的了解,本文着重探索了很多技术变化的方面。同时 ,也指出一些ASP.NET中可被用来改进现有应用程序的新功能。这并不是一篇全面认识ASP.NET新功能的文章。它主要涉及您所需要了解的实现成功移植的内容。

既然大多ASP 应用程序使用微软Visual Basic® Scripting Edition (VBScript),我估计您们大多会选择使用Visual Basic .NET移植到ASP.NET。这显然并不是必要条件,但在决定移植的同时改变编程语言会需要一些额外的努力,而且很可能会要求设计上的改变。

共存
在我们开始讨论具体的兼容与移植的问题前,您必须明白ASP与ASP.NET 如何共存。ASP与ASP.NET应用程序可以在服务器上共同运行而不互相排斥。这主要是因为这两种技术使用的文件后缀(.asp versus .aspx)与配置模式(metabase/registry versus XML-based configuration files)都有所不同。两种系统有着截然不同的处理引擎。

完全有可能使一应用程序的一部分运行ASP, 而它的另一部分运行ASP.NET。 如果您需要从一个既庞大又变化非常快的站点逐步变为ASP.NET,这一点就显得非常重要了。有人也许会认为一次性打包发布整个站点更好些。这对于Web应用的某些类型也许适用,但我想很多现有的网站,由于其规模巨大,结构复杂,网站内容与形式的革新迅速,而不适用此法。毕竟,如果您的网站有利可图,投资方恐怕十有八九会不断地让您加入新功能,而使您没法转向这个新的热门技术中去。另外,如果您打算全力转向ASP.NET,并把它当成长期投资,您会想利用这个机会尽可能的改进结构与设计。在这些情况下,用渐进的方式实现共存是必需的。

兼容性问题
把您的应用程序移植到ASP.NET也许并不容易;然而,也并不那么难。ASP.NET与ASP兼容性非常好。做到这点非常不容易,因为从ASP到ASP.NET是一场全新的变革。ASP.NET的设计者们原来计划要做到100%与ASP兼容,但最终为了长远考虑,出于优化该平台的目的,不得不收回计划。您不用担心,所有的变化都是往好的方向发展,不会在您安装时造成很大工作量。综合实际发生的变化,可以分为以下几项:
 

核心API 变化  
结构变化  
Visual Basic语言变化  
与COM 相关的变化  
应用程序配置的变化  
状态管理问题  
涉及安全性问题  
数据访问  

所有以上方面都会在下文中详细讨论。


核心API 变化

ASP的核心API由一些固有对象(Request, Response, Server, 等)及与它们相关的方法组成.除了一些简单变化,这些API在ASP.NET下会继续工作无误.所有的变化都与Request 对象有关.请看表一:

表1:API 变化

Request(item)
 在ASP中, 该方法会返回字符串数组.在ASP .NET,它会返回NameValueCollection.  
Request.QueryString(item)
 在ASP中, 该方法会返回字符串数组.在ASP .NET,它会返回NameValueCollection.  
Request.Form(item)
 在ASP中, 该方法会返回字符串数组.在ASP .NET,它会返回NameValueCollection.  


可以看出, 这些变化对所有的方法都是一样的。

如果,您要访问的对象对某键值有唯一值,您就不需要修改您的代码。可是,如果有多个值,您就需要用不同的方法获得它们。另外,请注意Visual Basic .NET中的集合是以零为基的,而VBScript的集合是以一为基的。

例如,在ASP中,访问来自对http://localhost/myweb/valuetest.asp?values=10&values=20发出的请求的单独查询字符窜数值,可能会得到以下结果:

<%
'This will output "10"
Response.Write Request.QueryString("values")(1)

'This will output "20"
Response.Write Request.QueryString("values")(2)
%>


在ASP .NET中,QueryString属性返回NameValueCollection对象。从此对象中,您可以获得数值集合,及您想要的真正内容。再一次要强调的是:请注意集合中的第一项是基于零而不是一:

<%
'This will output "10"
Response.Write (Request.QueryString.GetValues("values")(0))

'This will output "20"
Response.Write (Request.QueryString.GetValues("values")(1))
%>

无论是ASP还是ASP.NET,以下代码执行结果是一样的:

<%
'This will output "10", "20"
Response.Write (Request.QueryString("values"))
%>
 
结构变化指的是那些影响Active Server Pages布局与代码风格的变化。您必须对它们有所了解以确保您的代码会在ASP.NET中运行无误。


代码块: 声明函数与变量

在ASP中,您可以在您的代码标示符中声明子程序与全局变量.

<%
Dim X
Dim str
Sub MySub()
Response.Write "This is a string."
End Sub  
%>
在ASP.NET中,这已被禁止。您必须在<script> 块中声明所有函数与变量。

<script language = "vb" runat = "server">
Dim str As String
Dim x, y As Integer

Function Add(I As Integer, J As Integer) As Integer
Return (I + J)
End Function
</script>


编程语言混合

在ASP编程语言中,您基本上有两种选择:VBScript 或 Microsoft® JScript®。 您可以在同一页自由混合搭配脚本块。

在ASP.NET,您现在有三种选择。您可以使用C#, Visual Basic .NET, 或 Jscript。请注意我说的是Visual Basic .NET 而不是VBScript。这是因为VBScript不存在于.NET 平台。它已经完全被Visual Basic .NET归入。虽然您可以自由选择任何语言,必须注意的是您不能再在同一页任意混合不同语言。当然您可以在您的应用程序Page1.aspx中包含C#代码,而Page2.aspx中包含Visual Basic .NET代码。您所不能做