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



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

我的场景:

  • 我已经使用C#/创建了一个COM+对象。NET(Framework 4.0(.

  • 我正在使用Visual Studio安装程序项目将其部署到服务器上,该项目既将DLL安装到GAC,又将其注册到COM。

  • 浏览C:WindowsMicrosoft.NETassemblyGAC_MSIL,我可以成功地找到我注册的DLL。

  • 通过查看组件服务外接程序,我可以创建一个应用程序并添加我注册的组件。请注意,名称是不同的(DLL/namespace和ProgId之间(,这确实让我相信这两件事都正确发生了。

但是,我正在尝试从ASP Classic创建此COM的新实例。这意味着程序中有一条调用CCD_ 2的单行。,这就是投掷。

我已经做了以下工作:

  • 我用一行CreateObject("PROGID")创建了一个VBS文件,并调用了它。它也失败了,所以问题不局限于ASP
  • 我使用了Powershell 2.0(机器上唯一可用的(,并调用了New-Object -ComObject "PROGID",但它也失败了
  • 我已经将LinqPad复制到机器上,并将Type.GetTypeFromProgIDActivator.CreateInstance一起使用。我成功地调用了该实例

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

我完全被这件事难住了。NET可以在没有任何问题的情况下实例化COM对象,而VB6/ASP正在中止。

更糟糕的是,DLL上周已经成功部署,我只是在安装一个新版本,所以我应该有任何问题。

ASP和之间加载COM的方式有什么不同吗。NET可以导致这样的场景吗我在想什么:

  • 任何必须设置但尚未设置的权限
  • 任何的依赖项。NET DLL,从运行。NET,但没有从VBS运行
  • 核心运行时版本对于ASP/VBS来说可能非常棒

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

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

ASP、VBScript和PowerShell没有看到我应用的更改,并且由于某些原因找不到组件(80070002(的原因是必须重置IIS或完整的服务器关闭/重新启动周期


导致我出现这种情况的原因既有服务器管理员忘记执行重置的事实,也有我没有考虑的事实。NET能够获取COM实例。

我不知道能解释为什么会这样的细节——也许吧。NET还没有跟踪程序集,无论运行COM的是什么(是的,我不知道,对不起(都已经跟踪了。当然,这种影响正在发生。

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

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

最新更新