【问题标题】:Hosting a .net assembly for COM interop with long lifetime?托管具有长寿命的 COM 互操作的 .net 程序集?
【发布时间】:2010-11-14 14:22:21
【问题描述】:

我有一个组件(一个内置在 .net 中的程序集),我需要(几乎)访问两个不同网站的每个请求。一个网站是用经典的asp编写的,另一个是用asp.net mvc编写的。

目前我在 asp.net 解决方案中引用程序集并像调用任何 .net 程序集一样调用它。在经典的 asp 网站上,我通过 COM 包装器调用它。

这一切都很好,除了现在我需要这个组件真正保持活动状态并监控对配置文件的更改。在我的 asp.net 网站中,我可以在应用程序范围内保留一个引用,我想我可以在组件服务中注册它以供 asp 访问。

这是最好的方法吗?此外,这样组件实际上会被托管两次——一个实例在 asp.net 应用程序范围内,一个实例在组件服务中。我也许可以只让它存在于组件服务中,然后从 asp.net 中引用它。

我不知道 - 有些东西闻起来很腥(不,不是我) - 我是在正确的轨道上还是你看到了更好的选择?

【问题讨论】:

  • 我认为您的意思是第二段中的“在经典的 ASP 网站上”。

标签: asp.net com interop com-interop


【解决方案1】:

你真的需要一个长期运行的对象吗?你说你需要监控配置文件的变化——当配置变化时你需要触发一些动作还是你只需要确保每个传入的请求都使用你组件的最新配置副本?如果是后者,那么标准的 .NET 配置应该适合您,而不用担心对象的生命周期。

在托管方面,您需要使用任何 COM+ 服务吗?如果不是,那么我不会使用 COM+。如果您想要一个 .NET 组件的中心位置,为什么不在 GAC 中注册呢?

【讨论】:

  • 几乎每个对 asp.net 网站的请求和对传统经典 asp 网站的许多请求都会调用此组件,因此我希望初始化(读取/解析文件)尽可能快地发生。我还需要能够从无法直接调用 .net 程序集的 VBScript(经典的 asp 站点)调用它。
【解决方案2】:

好的,我想我找到了两个解决方案,对于这个项目都是可以接受的:

1) 在 Application 对象的 Application_OnStart 上的 global.asa 中注册它,就像这样Application("Someobject") = Server.CreateObject("Someobject")

2) 将其托管在组件服务中并在那里处理生命周期。

【讨论】:

    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多