2007-10-16

ASP向ASP.AET 环境迁移需要考虑的问题

来源: 本站收集整理 作者: 评论 0 条
 

Conn.Open("TestDB")

RS = Conn.Execute("Select * from Products")

Response.Write (RS("Name").Value)

数据类型的变化

在 Visual Basic .NET 中,Integer 值现在是 32 位,Long 类型已变成 64 位。

从 ASP .NET 中调用 COM 对象方法时,或调用自定义 Visual Basic 组件中的 Microsoft® Win32® API 调用时,可能会出现问题。应非凡注重需要的实际数据类型,确保传递或计算的值正确。

结构化异常处理

虽然人们所熟悉的 On Error Resume Next 和 On Error Goto 错误处理技术在 Visual Basic .NET 中仍可使用,但它们不再是进行错误处理的最佳方法。Visual Basic 现在具有一种完善的结构化异常处理方法,它使用 Try、Catch 和 Finally 要害字。假如可能,您应该迁移到这种新模式进行错误处理,因为它具有更强大、更一致的应用程序错误处理机制。

与 COM 有关的变化

随着 .NET 框架和 ASP .NET 的诞生,COM 实际上没有发生任何变化。但这并不表示在 ASP .NET 中使用 COM 对象时不必担心和考虑他们的行为。有一些基本情况,您必须了解。

线程模式的变化

ASP .NET 线程模式是多线程单元 (MTA)。这就意味着,对于目前使用的为单线程单元 (STA) 创建的组件,假如不采取额外的措施,将不能在 ASP .NET 中可靠地执行或运行。其中包括但不限于使用 Visual Basic 6.0 及其更低版本创建的所有 COM 组件。

ASPCOMPAT 属性

您将很兴奋听到这样一个消息:仍然可以使用这些 STA 组件,而不需要更改任何代码。您需要做的工作只是在 ASP .NET 网页的 。使用此属性将强制网页以 STA 模式执行,从而确保您的组件可以继续正确运行。假如试图使用 STA 组件但没有指定此标记,运行时将会发生异常情况。

将此属性的值设置为 true 时,将答应网页调用 COM 1.0 组件,该组件需要访问非治理的 ASP 内置对象。可以通过 ObjectContext 对象进行访问。

假如将此标记的值设为 true,性能会稍微有些下降。建议只在确实需要时才这样做。

早期绑定与后期绑定

在 ASP 中,对 COM 对象的所有调用都是通过 IDispatch 接口进行的。这种行为被称为“后期绑定”,因为对实际对象的调用是在运行时通过 IDispatch 间接处理的。在 ASP .NET 中,只要您愿意,可以继续以这种方式调用您的组件。

Dim Obj As Object

Obj = Server.CreateObject("ProgID")

Obj.MyMethodCall

仍然可以使用这种方式访问您的组件,但这不是首选方式。现在,在 ASP .NET 中,您可以利用早期绑定直接创建对象,如下所示:

Dim Obj As New MyObject

MyObject.MyMethodCall()

使用早期绑定,可以通过类型安全的方式与组件交互。为了在 COM 组件中使用早期绑定,您需要像在 Visual Basic 6.0 项目中添加 COM 引用一样,在项目中添加一个引用。假设您正在使用 Visual Studio .NET,将在 COM 组件之上后台创建一个治理的代理对象,给您的感觉就似乎是直接在处理一个 .NET 组件,而不是 COM 组件。

现在,您可能会担心性能问题。由于代理对象而引入了一个额外的层,所以使用 COM 协同操作时确实会存在一些问题。但是,大多数情况下,应该不会碰到什么问题,因为进行协同操作的实际 CPU 指令数仍然远远小于间接 IDispatch 调用的要求。您所得到的将远远超出您所失去的。当然,理想情况是使用最新创建的治理对象,但我们知道,由于我们在 COM 组件上的投入所限,并不总是能够立即做到这一点。

OnStartPage 和 OnEndPage 方法

需要非凡注重的是对旧版 OnStartPage 和 OnEndPage 方法的使用。假如您依靠于这些方法访问 ASP 固有对象,将需要使用 ASPCOMPAT 指令和 Server.CreateObject 以早期绑定方式创建组件,如下所示:
共7页: 上一页 [1] [2] [3] 4 [5] [6] [7] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:ASP.Net缓存系统几点提示  
下一篇:ASP.NET热点问题解答14个
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号