2012-03-06 47 views
1

我已经在网站上搜索了类似的问题,但没有发现任何关系。如果我错过了,我向社区道歉。通过COM互操作访问的.net组件的应用程序域行为

设置:

  • Windows 2008中,64位服务器
  • 经典的ASP应用程序(其中一些)IIS
  • 下部署在同一个应用程序池
  • 在这些传统的ASP应用程序有些创建和访问作为COM组件公开的.Net组件。

我们看到什么(我们通过登录有关通过COM暴露了当前进程和应用程序域在.NET组件的信息验证了这一点):在被加载

通过COM互操作暴露了.NET组件由IIS为应用程序池创建的工作进程下的单个应用程序域,无论应用程序池下的哪个经典asp应用程序调用它们。基本上,它的行为就像IIS为COM互操作组件创建单个应用程序域,该应用程序池中的所有应用程序都共享该应用程序域。 (通过“共享”,我的意思是,无论应用程序池下的哪个Web应用程序正在启动呼叫,对这些.Net组件的调用都通过IIS路由到单个应用程序域。我期待IIS在每个Web应用程序的应用程序域中加载COM互操作组件。

[如果我们在部署不同的应用程序池经典ASP应用IIS下,然后(明显)的.NET组件被加载在由IIS为每个应用程序池纺丝每个工作进程中的应用程序的域。]

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

回答

0

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

虽然在运行IIS7的集成管道中,将有可能改变这种行为,它将破坏现有的ASP网站,这些网站可能会迁移到依赖于此行为的IIS7(即使这是不经意的)。

+0

谢谢安东尼,有道理。我现在可以看到,它将很难以不同的方式实现:.net将如何决定加载这些组件的appdomain,因为此时它唯一的上下文就是调用进程。再次感谢。 – 2012-03-06 18:35:09

相关问题