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

Iis 7 使用COM+;的经典ASP。Net Interop 64位Windows Server 2008 IIS 7 Server.CreateObject失败,iis-7,asp-classic,64-bit,Iis 7,Asp Classic,64 Bit,我遇到了一个与在运行IIS7的64位Windows Server 2008服务器上从经典asp应用程序执行.Net dll有关的问题。情况如下: 我已经编写了一个.NETC#程序集来执行一些加密任务。通过从ServicedComponent继承,此程序集可用于经典ASP环境,确保assemblyinfo文件具有ComVisible(true)属性,并且已使用“regsvcs”命令行安装 在我自己的桌面(XP运行IIS6)上测试时,一切正常。当移动到IIS 7、Windows Server 200

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

我已经编写了一个.NETC#程序集来执行一些加密任务。通过从ServicedComponent继承,此程序集可用于经典ASP环境,确保assemblyinfo文件具有ComVisible(true)属性,并且已使用“regsvcs”命令行安装

在我自己的桌面(XP运行IIS6)上测试时,一切正常。当移动到IIS 7、Windows Server 2008时,我得到了臭名昭著的“ASP 0177 Server.CreateObject失败”

我尝试了以下方法,但没有成功:

  • 确保服务器上安装了ASP和脚本扩展功能,因为这不是IIS7的默认设置。这允许我执行简单的ASP命令,但不能执行.net程序集的server.createobject
  • 为支持经典asp站点的应用程序池启用32位应用程序支持
  • 使用NetworkService作为支持经典asp站点的应用程序池的标识
  • 尝试使用regsvr32注册dll,但失败
  • 我能够创建其他对象,例如“scripting.filesystemobject”
  • 将dll移动到wow64目录,然后使用regsvcs注册它们
  • 是的,当我一直在执行regsvcs命令时,它们是从“RunAs”管理员启动的命令行执行的。regsvcs命令已成功注册 从64位和32位版本。但是,当从经典asp应用程序中使用时,它会失败
  • 这个问题与我们的工作密切相关。然而,我认为这个问题更多地与在服务器上使用工具有关,而不是与我类似的编程问题


    有人有什么想法可以尝试吗?

    创建一个vbs测试文件并尝试在那里创建COM对象。如果您不能(即,您得到相同的错误),那么您的组件没有正确注册。
    如果可以-则它安装正确,问题在于您的应用程序在IIS中执行时所使用的帐户缺乏权限。

    创建vbs测试文件,并尝试在那里创建COM对象。如果您不能(即,您得到相同的错误),那么您的组件没有正确注册。
    如果可以-那么它安装正确,问题在于您的应用程序在IIS中执行时所使用的帐户缺乏权限。

    在这里提供了大量帮助并进行了更多研究之后,我们终于找到了答案。为了解决我们的问题,我们采取了以下措施:

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

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

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


    这个过程消除了最初的错误,还具有在IIS运行时替换dll的额外好处。

    在这里提供了大量帮助并进行了更多研究之后,我们终于找到了答案。为了解决我们的问题,我们采取了以下措施:

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

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

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

    此过程消除了原始错误,还具有在IIS运行时替换dll的附加好处。

    尝试此方法

    组件服务->计算机->我的计算机->COM+应用程序

    打开COM+应用程序对象

    打开组件

    在类上单击鼠标右键,然后选择“属性”

    在“高级”下有一个“允许IIS内部属性”复选框

    它对我很管用

    试试这个

    组件服务->计算机->我的计算机->COM+应用程序

    打开COM+应用程序对象

    打开组件

    在类上单击鼠标右键,然后选择“属性”

    在“高级”下有一个“允许IIS内部属性”复选框


    它对我有效

    降级到windows 2003?听起来你真的不需要2008。不幸的是,在这种情况下,我没有选择降级到Windows 2003。当我们将经典的asp应用程序迁移到.Net时,大多数网站都将在.Net中构建。因此,我认为我们必须解决这个问题:(降级到windows 2003?听起来你真的不需要2008。不幸的是,在这种情况下,我没有降级到windows 2003的选项。当我们将经典asp应用程序迁移到.Net时,大多数网站将内置在.Net中。因此,我想我们必须解决问题:(感谢你的好主意。我成功地获得了一个VBS脚本来创建对象。因此,我开始查看权限。为了快速查看权限是否存在问题,我将以下本地帐户添加到administrators组(当然,只是为了测试)这仍然不允许asp页面创建对象:匿名登录身份验证用户交互式IUSR网络服务EveryoneCool。我们正在接近。请看这里:您是否已打开脚本和控件的32位兼容模式?另请查看第1页上的最后一篇文章。感谢这些想法。但是,我已经设置了pr属性:“启用32位应用程序”对于经典asp虚拟目录所使用的应用程序池为true。我相信上面链接中描述的脚本方法,只是做同样事情的前IIS7方法。现在它只是应用程序池中的一个配置选项…任何其他id