在实例化.NET类时,经典ASP使用了什么AppDomain?

时间:2011-08-23 15:30:17

标签: .net asp-classic

当经典ASP页面上的代码创建.NET类的实例(标记为ComVisible,类型库已注册)时会发生什么(就CLR而言)?

什么AppDomain用于新创建的实例?它与在同一站点上运行的ASP.NET应用程序的AppDomain有什么关系吗?

2 个答案:

答案 0 :(得分:2)

IIS中的每个“应用程序”(asp.net或经典ASP站点)都在win32进程中运行,也称为“应用程序池”。每个应用程序池(进程)可以同时加载到进程中的零或一个版本的CLR加载*(1.0,1.1,2.0,4.0)。进程内的每个CLR实例至少有一个Application Domain,即.NET的执行单元和隔离单元。当您通过经典ASP中的CCW(COM可调用包装器)实例化.NET组件时,CLR将加载到承载该站点的应用程序池进程中,并为该进程创建的默认appdomain 。 URL路径层次结构中的逻辑位置无关紧要,因为不同的段可以具有不同的应用程序池。

这可能有很多内容,但我建议阅读IIS / WAS架构和CLR的进程/ appdomain /程序集关系。

* CLR 4.0加载程序允许将一个或多个版本的CLR加载到同一进程中

答案 1 :(得分:1)

您可以尝试一下并检查AppDomain.CurrentDomain

http://msdn.microsoft.com/en-us/library/system.appdomain.currentdomain.aspx

然后,您可以查看FriendlyName或Id来查看或比较应用域。

编辑:

您在下面的评论中询问了谁创建了appDomain以及是否有多个ASP应用可以共享。 ASP在IIS内运行,如果IIS6或更高版本,IIS应用程序(托管ASP)绑定到appPool。如果两个asp / IIS应用程序绑定到同一个appPool,那么它们共享相同的进程。如果没有,他们不会。一个进程可以有多个appDomains。当asp站点通过COM创建.net对象时,CLR运行该代码。 CLR在进程中创建第一个appDomain,并将其命名为“DefaultDomain”。您可以以编程方式创建其他人。