使用COM + .Net Interop 64位Windows Server 2008 IIS 7 Server.CreateObject失败的经典ASP

Pat*_*Pat 1 64-bit iis-7 asp-classic

我遇到了与运行IIS7的64位Windows Server 2008服务器上的经典asp应用程序执行.Net dll相关的问题.情况如下:

我编写了一个.Net C#程序集来执行一些加密任务.通过从ServicedComponent继承,可以将此程序集用于传统ASP环境,确保assemblyinfo文件具有ComVisible(true)属性,并且已使用"regsvcs"命令行进行安装.

在我自己的桌面上测试(运行IIS6的XP)一切正常.迁移到IIS 7,Windows Server 2008时,我得到了臭名昭着的"ASP 0177 Server.CreateObject failed".

我试过以下无济于事:

  1. 确保在服务器上安装了ASP和脚本扩展功能,因为这不是IIS7的默认设置.这允许我执行简单的ASP命令,但不执行.net程序集的server.createobject.
  2. 为支持经典asp站点的应用程序池启用32位应用程序支持
  3. 使用NetworkService作为支持经典asp站点的应用程序池的标识
  4. 尝试使用regsvr32注册dll,失败了
  5. 我能够创建其他对象,如"scripting.filesystemobject"
  6. 将dll移动到wow64目录,然后使用regsvcs注册它们.
  7. 是的,当我执行regsvcs命令时,它们来自使用"RunAs"管理员启动的命令行.regsvcs命令已成功从64位和32位版本注册.但是,当从经典的asp应用程序中使用时,它会失败.

这个问题是密切相关的这一个.但是,我认为这个问题与使用服务器上的工具更相关,而不是与我类似的程序问题.

任何人都有更多想法尝试?

Pat*_*Pat 6

经过这里的大量帮助和更多的研究,我们终于找到了答案.为解决我们的问题,我们做了以下事情:

  • 不再继承ServiceComponent(这没关系,因为我们实际上并没有利用任何特定的COM +功能)
  • 使用以下命令安装组件,必须按顺序完成:

    gacutil/i"C:\ Inetpub\wwwroot\ASPTest*dll*的名称"

    regasm/tlb"C:\ Inetpub\wwwroot\ASPTest*dll的名称*"

此过程消除了原始错误,并且还具有在IIS运行时能够替换dll的额外好处.