【问题标题】:Classic ASP using COM+ .Net Interop 64 Bit Windows Server 2008 IIS 7 Server.CreateObject Fails使用 COM+ .Net Interop 64 位 Windows Server 2008 IIS 7 Server.CreateObject 的经典 ASP 失败
【发布时间】:2010-11-19 20:16:13
【问题描述】:

我遇到了与在运行 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 应用程序中使用时,它会失败。

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

还有人想尝试更多的想法吗?

【问题讨论】:

  • 降级到 Windows 2003?听起来你真的不需要 2008。
  • 不幸的是,对于这种情况,我没有降级到 Windows 2003 的选项。当我们将经典的 asp 应用程序迁移到 .Net 时,大部分网站都将在 .Net 中构建。所以,我认为我们必须弄清楚这个问题:(

标签: iis-7 asp-classic 64-bit


【解决方案1】:

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

【讨论】:

  • 感谢您的好主意。我能够获得成功创建对象的 VBS 脚本。所以,我开始看权限。为了快速查看权限是否是问题,我将以下本地帐户添加到管理员组(当然,只是为了测试)仍然不允许 asp 页面创建对象:匿名登录 Authenticated Users Interactive IUSR Network Service Everyone跨度>
  • 酷。我们越来越近了。看看这里:windows2008forum.com/f9/com-problem-in-ws2008-263.html 你是否为脚本和控件打开了 32 位兼容模式?另请查看第 1 页上的最后一篇文章。
  • 感谢这些想法。但是,对于经典 asp 虚拟目录正在使用的应用程序池,我已经将属性:“启用 32 位应用程序”设置为 true。我相信上面链接中描述的脚本方法只是做同样事情的 IIS7 之前的方法。现在它只是应用程序池中的一个配置选项......还有其他想法吗?
  • 您的应用程序池在哪个帐户下运行?您可以验证此帐户的权限吗?此帐户在实际 DLL 上是否至少有 RX?
  • 目前,我的应用程序池在 NetworkService 下执行。但是,我已经完成了将这个帐户和其他几个帐户添加到服务器上的管理员组的任务,所以我认为我们已经走上了这条路。请参阅我的第一条评论以供参考。谢谢。
【解决方案2】:

经过大量的帮助和更多的研究,我们终于找到了答案。为了解决我们的问题,我们执行了以下操作:

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

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

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

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

【讨论】:

    【解决方案3】:

    试试这个

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

    打开一个 COM+ 应用程序对象。

    打开组件。

    右键单击一个类并选择属性。

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

    对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多