我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 网络编程 > ASP专区 > Asp未分类 > 迁移到 ASP .NET:需考虑的重要问题(1)
热门文章排行
热门文章排行 手推车”功能的实现(10-07)
八大法则防范ASP网站漏洞(10-23)
ASP教程十一、调试ASP脚本(10-23)
在JSP中访问数据库大全(10-23)
虚机服务中常见Asp.Net低级错误一览(03-21)
精采文章排行
精采文章排行 ASP.NET实现抓取网页中的链接(11-15)
ASP连接数据库的11种方法(11-10)
如何动态创建网页的RSS内容摘要(11-10)
ASP网站漏洞及入侵防范方法(11-10)
ASP自定义函数:对字符串正则替换(11-10)
技术专题推荐
网管论坛交流
 

迁移到 ASP .NET:需考虑的重要问题(1) 

作者:佚名   来源:一亩三分地   点击:   日期:2007-03-28

简介
虽然 Microsoft® ASP .NET 的设计者在保持 ASP 应用程序的向后兼容性方面做了大量不懈的努力,但在将 Web 应用程序由 ASP 向 ASP .NET 迁移之前,还是应该了解一下几个关键的问题。在 .NET 平台和 ASP .NET 中对现有技术进行了改进并采用了一些新技术,透彻理解这些技术有利于简化此迁移过程,但这需要经过一段漫长的时间。

本文探讨各方面的变化,以便让用户清楚地了解建立 ASP 应用程序并使其在 ASP .NET 环境中运行所必须进行的一些工作。同时,它还指出了 ASP .NET 的一些新特性,用户可以充分利用这些新特性改进现有的应用程序。但这决不是 ASP .NET 所有新特性的全面介绍,而只是着重探讨一下成功迁移时需考虑的一些问题。

我设想,由于大多数 ASP 应用程序都使用 Microsoft® Visual Basic® Scripting Edition (VBScript),所以大多数用户都会选择使用 Visual Basic .NET 迁移到 ASP .NET。显然,这不是必需的。但如果决定在迁移的同时更改语言,将需要进行一些额外的工作,而且很可能还会涉及到设计和结构方面的更改。

共存性
在讨论具体的兼容性和迁移问题之前,了解一下 ASP 和 ASP .NET 如何共存非常重要。ASP 和 ASP .NET 应用程序可以同时在服务器上运行,而互不影响。这主要是由于两种技术各自使用不同的文件扩展名(.asp 与 .aspx)和不同的配置模型(配置数据库/注册表与基于 XML 的配置文件)。这两种系统还各自具有相应的处理引擎。

让某个应用程序的一部分运行 ASP,而另一部分运行 ASP .NET,这是完全可能的。如果需要将一个快速发展的大型站点一次一小部分地迁移到 ASP .NET,这种特性将对您大有益处。某些用户可能会说,最好能一次性迁移和部署整个站点。对于某些类型的 Web 应用程序来说也许是如此,但我认为,有许多站点并不能这样:考虑到站点内容和外观的绝对大小、复杂程度以及迅速变化,这种方式非常缺乏灵活性。毕竟,对于一个盈利的网站来说,那些掏腰包的人不可能允许您停止他们的新增功能,而将整个网站迁移到这种热门的新技术。另外,如果把向 ASP .NET 迁移作为一项长期投资,您将希望利用此机会尽可能多地对结构和设计做一些改进。综合这些情况,分阶段的共存性迁移是绝对必要的。

兼容性问题
将应用程序向 ASP .NET 迁移可能不是一件容易的事情;但是,也不应该很困难。ASP .NET 与 ASP 的兼容性非常好,给用户的感觉就好象 ASP .NET 是 ASP 的一个完整翻版。ASP .NET 设计者的最初目标是实现与 ASP 百分之百的向后兼容性,但在随后的工作中,他们不得不改变了这一初衷,以便彻底地改进这一平台。不过不要担心,我们尽可能进行了大量改进,应该不会需要您进行太多的工作。所发生的实际变化可以归纳为下列几类:

核心 API 的变化
结构变化
Visual Basic 语言的变化
与 COM 有关的变化
应用程序配置的变化
状态管理问题
与安全性有关的变化
数据访问
下面将详细讨论上述各个方面的变化。

核心 API 的变化
ASP 的核心 API 由几个固有对象(Request、Response 和 Server 等)及其有关方法组成。除几处简单变化之外,这些 API 在 ASP .NET 下可以继续正常运行。所有变化都与 Request 对象有关,如表 1 所示:

表 1:API 的变化

方法 变化
Request(item) 在 ASP 中,此方法返回字符串数组。在 ASP .NET 中,它返回 NameValueCollection。
Request.QueryString(item) 在 ASP 中,此方法返回字符串数组。在 ASP .NET 中,它返回 NameValueCollection。
Request.Form(item) 在 ASP 中,此方法返回字符串数组。在 ASP .NET 中,它返回 NameValueCollection。

正如您所见,对于涉及到的所有方法,其变化基本上都相同。

如果访问的 item(项)只包含特定关键字的一个值,您将不必修改自己的代码。但是,如果给定的关键字具有多个值,您将需要使用其它方法返回值的集合。另请注意,Visual Basic .NET 中的集合都是基于 0,而 VBScript 中的集合是基于 1 的。

例如,在 ASP 中,将按下列方式访问 http://localhost/myweb/valuetest.asp?values=10&values=20 请求返回的各个查询字符串值:

<%
'输出“10”
Response.Write Request.QueryString("values")(1)

'输出“20”
Response.Write Request.QueryString("values")(2)
%>

在 ASP .NET 中,QueryString 属性返回 NameValueCollection 对象,在检索所需的实际项之前,将需要从该对象中检索 Values 集合。另外需要注意,集合中的第一项是使用 0 而非 1 索引进行检索的:

<%
'输出“10”
Response.Write (Request.QueryString.GetValues("values")(0))

'输出“20”
Response.Write (Request.QueryString.GetValues("values")(1))
%>

下列代码在 ASP 和 ASP .NET 中的运行结果相同:

<%
'输出“10”和“20”
Response.Write (Request.QueryString("values"))
%>

结构变化
结构变化将影响 Active Server Pages 的布局和编码样式。您需要了解其中的一些信息,以确保您的代码能够在 ASP .NET 中运行。

代码块:声明函数和变量
在 ASP 中,可以在代码分隔符之间声明子程序和全局变量。

<%
Dim X
Dim str
Sub MySub()
Response.Write "这是一个字符串。"
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&reg; JScript&reg;。在同一网页中,您可以随意组合和匹配各种脚本块。

在 ASP .NET 中,目前有三种语言可供您选择:C#、Visual Basic .NET 或 JScript。注意,我说的是 Visual Basic .NET,而不是 VBScript。这是因为 .NET 平台上不存在 VBScript,它已被完全集成到 Visual Basic .NET 中。虽然可以自由选择其中的任意一种语言,但需要注意的是,您不能像在 ASP 中那样在同一网页中使用多种语言。您的确可以在同一个应用程序的 Page1.aspx 中使用 C# 代码,而在 Page2.aspx 中使用 Visual Basic .NET 代码,只是您不能在同一页中混用它们。

新增的 Page 指令
在 ASP 中,必须将所有指令置于网页中同一分隔块内的第一行。例如:

<%LANGUAGE="VBSCRIPT" CODEPAGE="932"%>

在 ASP .NET 中,需要将 Language 指令替换为 Page 指令,如下所示:

<%@Page Language="VB" CodePage="932"%>
<%@QutputCache Duration="60" VaryByParam="none" %>

可以根据需要包含任意多行指令。指令可以位于 .apsx 文件中的任意位置,但标准做法是将其置于文件的最开头。

在 ASP .NET 中新增了几个指令。我鼓励您在 ASP .NET 文档中查看一下这些指令,了解它们可以为您的应用程序带来什么样的好处。

生成函数不再有效
开发者指出,在 ASP 中,他们可以使用“生成函数”灵活处理一些问题。“生成函数”基本上是一个子程序,在其主体中嵌入了大量 HTML。例如:

<%Sub RenderMe()
%>
<H3> 这是正在生成的 HTML 文本。</H3>
<%End Sub
RenderMe
%>

虽然使用这类函数能够实现非常酷的功能,但 ASP .NET 中不允许使用这类编码。这可能是出于优化性能的考虑。我想您肯定遇到过,像这样将代码与 HTML 混在一起时,有些函数很快就变得可读性极差,而且难以管理。在 ASP .NET 中,实现此目的的最简单方法是调用 Response.Write 来代替 HTML 输出,如下所示:

<script language="vb" runat="server">
Sub RenderMe()
Response.Write("<H3> 这是正在生成的 HTML 文本。</H3>")
End Sub
</script>

<%
Call RenderMe()
%>

注意,我说的是“最简单的方法”,但并不一定表示是最佳方法。根据生成代码的复杂程度和数量,使用自定义 Web 控件效果可能更好,这种控件允许您通过编程设置 HTML 属性,并将代码与内容真正分开,使代码可读性更强。

Visual Basic 语言的变化
正如我前面提到过的,VBScript 已集成到了更完整、功能更强大的 Visual Basic .NET 中。这一节,我将重点讲述您可能会遇到的与 Visual Basic 语言变化有关的一些问题。但需注意,这并不是详尽的 Visual Basic 变化列表。我只是着重讲述作为一名 ASP/VBScript 程序员,在使用 Visual Basic .NET 向 ASP .NET 迁移时可能会遇到的一些问题。有关所有语言变化的详尽列表,请参见 Visual Basic .NET 文档。

告别 Variant 数据类型
我们熟悉它、喜欢它,对它又爱又恨。当然,我说的是 VARIANT 数据类型。.NET 中没有 VARIANT,因此 Visual Basic .NET 不支持这种数据类型。这意味着,您的所有 ASP 变量将悄悄地由 VARIANT 类型更改为 Object 类型。根据需要,应用程序中使用的大量变量可以而且应该更改为相应的基元类型。如果您的变量实际上是 Visual Basic 中的 object 类型,则只需在 ASP .NET 中将其显式声明为 Object 类型。

Visual Basic Date 类型
值得特别注意的一种 VARIANT 类型是 VT_DATE,它在 Visual Basic 中以 Date 类型出现。在 Visual Basic 中,使用四个字节以 Double 格式存储 Date。在 Visual Basic .NET 中,Date 使用公共语言运行库 DateTime 类型,该类型使用八个字节整数

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·ASP中巧用Response属性 ·第六课:ASP脚本循环语句
·在 Web 页上使用条件数值格式 ·连接数据库查询手册(不仅仅适用于asp)
·警惕"给你的FileSystemObject对象加把锁" ·用ASP做全文检索

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。