Iis 7 通过COM互操作访问的.net组件的应用程序域行为

Iis 7 通过COM互操作访问的.net组件的应用程序域行为,iis-7,asp-classic,com-interop,appdomain,Iis 7,Asp Classic,Com Interop,Appdomain,我在网站上搜索了一个类似的问题,但没有找到任何相近的答案。如果我错过了,我向社区道歉 设置: Windows 2008,64位服务器 经典ASP应用程序—其中一些应用程序部署在IIS下的同一应用程序池中 这些经典ASP应用程序中的某些页面创建并访问作为COM组件公开的.Net组件。 我们所看到的是,我们通过记录通过COM公开的.net组件中有关当前进程和应用程序域的信息来验证这一点: 通过COM互操作公开的.Net组件将加载到IIS为应用程序池创建的工作进程下的单个应用程序域中,而不管应用程序池

我在网站上搜索了一个类似的问题,但没有找到任何相近的答案。如果我错过了,我向社区道歉

设置:

Windows 2008,64位服务器 经典ASP应用程序—其中一些应用程序部署在IIS下的同一应用程序池中 这些经典ASP应用程序中的某些页面创建并访问作为COM组件公开的.Net组件。 我们所看到的是,我们通过记录通过COM公开的.net组件中有关当前进程和应用程序域的信息来验证这一点:

通过COM互操作公开的.Net组件将加载到IIS为应用程序池创建的工作进程下的单个应用程序域中,而不管应用程序池下的哪个经典asp应用程序调用它们。基本上,它的行为就像IIS正在为COM互操作组件创建一个应用程序域,该组件由该应用程序池中的所有应用程序共享。共享的意思是,对这些.Net组件的调用都由IIS路由到单个应用程序域,而不管应用程序池下的哪个web应用程序正在发起调用。我希望IIS在每个web应用的应用程序域中加载COM互操作组件

[如果我们在IIS下的不同应用程序池中部署经典ASP应用程序,那么显然,.Net组件将加载到IIS为每个应用程序池旋转的每个工作进程中的应用程序域中。]


我想知道是否有其他人见过这种行为,以及它是否是IIS 7.x和.Net COM组件的已知行为

这是正常行为。当外部COM客户端实例化COM可见的.NET组件时,.NET组件将加载到该进程的默认AppDomian中。如果默认AppDomain不存在,则会创建它


在IIS7与集成管道一起运行时,可以改变这种行为,这将破坏可能迁移到IIS7的现有ASP网站,即使这些网站无意中依赖于这种行为。

谢谢Anthony,这是有意义的。我现在可以看出,要以不同的方式实现它是很困难的:因为此时它唯一的上下文是调用过程,所以.Net如何决定加载这些组件的appdomain。再次感谢。