从经典 ASP 访问 .NET 程序集

问题描述 投票:0回答:5

我一直在尝试访问我在经典 ASP 中使用

创建的 .NET 程序集
dim foo
set foo = Server.CreateObject("TestAssembly.MyClass")

问题是我收到错误:

Server object error 'ASP 0177 : 800401f3'

Server.CreateObject Failed

/test.asp, line 4

Invalid class string

我已按照文章中的说明使用 gacutil 和 regasm 注册了程序集 (TestAssembly.dll):用 .NET 程序集替换旧的经典 ASP COM 组件,我从另一个问题中引用了该文章。它提供了两种安装组件的方法,我已经尝试了两种方法,但没有成功。

让这个工作正常进行会很棒,因为它可以让我逐渐将经典的 ASP 站点迁移到 .NET

c# .net asp-classic assemblies
5个回答
3
投票

确保您的 .NET 程序集设置为 COM 可见。


3
投票

在此处检查注册表:*HKLM\SOFTWARE\Classes* 并查看是否存在命名空间.class(例如“TestAssembly.MyClass”)以及它是否有一个名为“CLSID”且具有有效 ID 的密钥。

如果注册表项不存在,请确保项目>属性>程序集信息具有“使程序集COM-Visible”,然后重新编译。 编译后,运行 regasm(如果您使用的是 64 位计算机,则必须显式引用 64 位版本的 regasm - c:\Windows\microsoft.net ramework64 4.0.30319 高潮)与:

regasm /codebase /tlb TestAssembly.dll

0
投票

此错误意味着“无效的类字符串”——换句话说,对 CreateObject 的调用失败,因为 OLE 子系统无法找到名称对象。原因包括:

  1. 你确实没有在服务器上运行regsvr32。
  2. 您运行了 regsvr32,但它报告了错误。
  3. 有人修改了部分注册表的安全性,导致 OLE 子系统无法读取全部或部分 HKEY_CLASSES_ROOT 树。
  4. 您尝试创建的对象名称拼写错误或不正确。
  5. 确定是否是权限问题

将匿名用户(IIS 使用)添加到管理员组。然后测试页面就可以工作了,证明是权限问题。不要忘记从管理员组中删除匿名 IIS 用户!

  1. 判断是否是文件权限问题:

从管理员组中删除匿名用户后,向文件(smtpsvg.dll)添加失败审核,这将确定文件是否曾经被访问过(通过缺少失败事件)。如果不是,则表明故障发生在文件访问之前,但请继续检查文件/目录权限以确保匿名 IIS 用户可以访问该文件。

  1. 检查注册表权限

使用 Regedt32,在 smtpsvg.dll 上查找。检查密钥(和子密钥)的权限,并确保匿名用户具有读取权限。查找包含位置值和版本的类 ID,并检查这些权限。

来源:http://forums.digitalpoint.com/showthread.php?t=21069


0
投票

我过去在从 ASP Classic 调用 .NET 程序集时遇到过问题。我认为这是我一路上遇到的几个问题之一。

为了使事情正常进行,我必须做的一件事是确保 ASP 站点的应用程序池使用与匿名用户相同的身份(默认情况下它使用“系统用户”或类似的身份)。因此,我最终创建了一个新的本地用户(确保它是 IIS_WPG 组的成员)并将其用于 IIS 匿名用户和应用程序池身份。

这是一个麻烦的领域,我使用它的应用程序是一个收缩包装产品,我们发现有些机器被搞砸了,以至于我们根本无法让 ASP Classic 到 .net 调用工作,即使在大量的权限调整等。

编辑:

我想我应该说,我并不是声称此更改将解决这个特定问题,只是这是我们必须做出的更改之一,以使 ASP Classic -> .NET 代码适用于广泛的随机客户服务器。


0
投票

我使用了icepicker的解决方案,它对我有用。我花了一天多的时间来研究我遇到的这个错误

Microsoft VBScript runtime error '800a01ad' 

ActiveX component can't create object: 'namespace.class' 

/page.asp, line 15

解决方案是使用c:\Windows\microsoft.net ramework64(使用的框架文件夹) 高潮)。我从 c:\Windows\microsoft.net ramework64c:\Windows\microsoft.net ramework 运行此程序,但它不起作用。我的假设是,如果您运行 REGASM,它将默认为 32 位版本。除非您指定framework64/v4.0.x.x.x(或任何版本)文件夹,否则它将运行64位。

© www.soinside.com 2019 - 2024. All rights reserved.