从经典ASP访问.NET程序集

时间:2009-02-06 12:52:59

标签: c# .net asp-classic assemblies

我一直在尝试使用

访问我在经典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

我已按照Replacing Old Classic ASP COM Components with .NET Assemblies中引用的文章another question中的说明使用gacutil和regasm注册了程序集(TestAssembly.dll)。它提供了两种安装组件的方法,我尝试了两种方法,但无济于事。

让这项工作变得很棒,因为它可以让我逐步将经典的ASP网站迁移到.NET

5 个答案:

答案 0 :(得分:3)

要检查的另一件事:确保您的.Net程序集设置为COM Visible。

答案 1 :(得分:3)

在这里检查注册表:* HKLM \ SOFTWARE \ Classes *并查看namespace.class是否存在(例如“TestAssembly.MyClass”),并且它有一个名为“CLSID”且具有有效ID的密钥。

如果注册表项不在那里,请确保项目>属性>程序集信息具有“使程序集COM可见”,然后重新编译。 编译完成后,运行regasm(如果您使用的是64位计算机,则必须明确引用64位版本的regasm - c:\ Windows \ microsoft.net \ framework64 \ v4.0.30319 \ regasm ):用:

regasm /codebase /tlb TestAssembly.dll

答案 2 :(得分:0)

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

  1. 毕竟你真的没有在服务器上运行regsvr32。
  2. 您运行了regsvr32,但报告错误。
  3. 某人修改了部分注册表的安全性,阻止OLE子系统读取全部或部分HKEY_CLASSES_ROOT树。
  4. 您尝试创建的对象的名称拼写错误或不正确。
  5. 确定是否是权限问题
  6. 将匿名用户(由IIS使用)添加到Administrators组。测试页然后工作,证明这是一个权限问题。不要忘记从Admin组中删除匿名IIS用户!

    1. 确定它是否是文件权限问题:
    2. 从Admin组中删除匿名用户后,将失败审核添加到文件(smtpsvg.dll),这将确定是否曾访问该文件(由于缺少失败事件)。如果不是,则表明故障发生在文件访问之前,但请继续检查文件/目录权限以确保匿名IIS用户可以访问该文件。

      1. 检查注册表权限
      2. 使用Regedt32,在smtpsvg.dll上找到。检查密钥(和子密​​钥)的权限,并确保匿名用户具有读取权限。查找包含位置值和版本的class-id,并检查这些权限。

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

答案 3 :(得分:0)

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

我必须做的事情之一是确保ASP站点的应用程序池使用与匿名用户相同的身份(默认情况下它使用“系统用户”或类似的东西)。所以我最终创建了一个新的本地用户(确保它是IIS_WPG组的成员)并将其用于IIS匿名用户和App Pool标识。

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

修改

我想我应该说我没有声称这个改变会解决这个特殊问题,只是这是我们为制作ASP Classic而做出的改变之一 - > .NET代码适用于各种随机客户服务器。

答案 4 :(得分:0)

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

Microsoft VBScript runtime error '800a01ad' 

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

/page.asp, line 15

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