|
COM 互操作性
公共语言运行库使 .NET 对象能够无缝地与传统的 COM 组件相互操作。ASP.NET 向开发人员公开熟悉的 Server.CreateObject(ProgId)
API 以创建 COM 的晚期绑定引用。
Dim myConn
myConn = Server.CreateObject("ADODB.Connection");
也可通过创建运行时可调用的包装 (RCW)(该包装优化非托管代码和托管代码间的调用性能),使用早期绑定的传统 COM 组件。可使用
.NET 框架 SDK 中包含的 Tlbimp.exe 实用工具创建 RCW。有关 Tlbimp.exe 的更多信息,请参阅“常见任务入门”互操作性一节。ASP.NET
性能一节包含有关比较晚期绑定与早期绑定的更多信息。
同 ASP 一样,也可以使用具有 progid 或 classid
属性的 <object> 标记来创建传统的 COM 组件。除了可以在页中使用
<object> 标记外,还可以在应用程序的 Global.asax
文件中使用该标记。在这种情况下,将对象添加到 Page.Application.StaticObjects 集合,并且只需使用它的
id 属性便可以编程方式访问它。注意,不能以静态方式在 Global.asax
文件中创建单线程单元 (STA) 对象,因为这样做会像在 ASP 中那样发生运行时错误。
此外,ASP.NET 继续支持现有的 ASP 内部接口 ObjectContext Intrinsic Flow、OnStartPage
和 OnEndPage。支持这些接口意味着可以在 ASP.NET 页中使用现有组件(Commerce Server、Exchange
等等)。默认情况下不启用这些接口,但可通过下列页指令显式打开它们:
<%@ Page ASPCompat="true" %>
该指令使 ASP.NET 创建非托管的 ASP 内部对象并将它们传递到页中使用的 COM 组件。它还在 STA 线程池中运行页。有关信息,请参阅下节。
性能注意事项
在 ASP.NET 中,默认情况下线程池是多线程单元 (MTA) 模式,这会影响传统的单元线程 Visual Basic 5 和
Visual Basic 6 组件的性能。ASPCompat="true" 属性使 STA 线程池能够基于每页解决现有
Visual Basic 组件的性能问题。
在托管和非托管组件之间调用同样会引起封送开销,这将降低页的性能。每种方案都会产生不同的性能特点,因此在决定互操作性对应用程序是否合适时进行充分地测试是重要的。然而,几乎在所有方案中,重写托管代码中的
COM 组件都会带来性能收益。有关更多信息和重要提示,请参阅 ASP.NET
性能一节。
本节小结
1.ASP.NET 向开发人员公开熟悉的 Server.CreateObject API 以创建 COM 的晚期绑定引用。
2.也可通过创建运行时可调用的包装 (RCW)(该包装优化非托管代码和托管代码间的调用性能),使用早期绑定的传统 COM 组件。
3.ASP.NET 继续支持现有的 ASP 内部接口 ObjectContext Intrinsic Flow、OnStartPage
和 OnEndPage。这些接口通过页指令 <%@ Page ASPCompat="true"
%> 显式启用。
4.ASPCompat="true" 属性使 STA
线程池能够基于每页解决现有 Visual Basic 组件的性能问题。
5.几乎在所有方案中,重写托管代码中的 COM 组件都会提供性能收益。
感谢2001 Microsoft Corporation教材提供 |
|