迁移到 ASP .NET:需考虑的重要问题
2024-07-10 12:57:45
供稿:网友
简介
虽然 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