.NET COM+ 对象不能用于 ASP 经典

.NET COM+ Object can't be used from ASP Classic

TL;DR:为什么从 .NET 成功激活 COM+ 组件但无法从 ASP 加载?

我的场景:

但是,我正在尝试从 ASP Classic 创建此 COM 的新实例。这意味着程序中有一行调用 CreateObject("PROGID"),这是抛出。

我已经完成了以下操作:

这个错误似乎很常见,是 80070002。这应该表示 COM 找不到程序集文件。检查注册表后,我可以看到 COM 记录的程序集名称(FQ 程序集名称)确实与我安装的程序集相对应。运行时是新的 CLR (v4.0.30319),class 名称也正确。

我完全感到困惑 .NET 可以毫无问题地实例化 COM 对象,而 VB6/ASP 正在中止。

更糟糕的是,DLL 上周部署成功,我只是安装一个新版本,所以我应该有什么麻烦。

在 ASP 和 .NET 之间加载 COM 的方式是否有任何差异会导致这种情况? 我在想什么:

最后一项应该是正确的,因为我上周才成功完成这项工作并且我没有更改任何关于运行时的内容。

看起来这似乎不是一个难以捉摸的问题。我仍然会在这里记录它,因为有些人可能 运行 在完全相同的情况下进入这个问题,尽管这不太可能。

ASP、VBScript 和 PowerShell 没有看到我应用的更改并且由于某种原因找不到组件 (80070002) 的原因是 IIS 重置或完整shutdown/restart 需要服务器周期


导致我出现这种情况的原因是服务器管理员 忘记了 执行重置 - 我没有考虑到这一点 - 以及 .NET 能够获取 COM 实例。

我不知道可以解释为什么会这样的细节 - 也许 .NET 还没有隐藏程序集,而 运行s COM(是的,我不知道,抱歉)确实有.当然,类似的事情正在发生。

服务器干净重启完全解决了这个问题。

最后一点 - 仅在 Component Services 关闭应用程序是不够的。