我一直在尝试使用
访问我在经典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
答案 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子系统无法找到名称对象。原因包括:
将匿名用户(由IIS使用)添加到Administrators组。测试页然后工作,证明这是一个权限问题。不要忘记从Admin组中删除匿名IIS用户!
从Admin组中删除匿名用户后,将失败审核添加到文件(smtpsvg.dll),这将确定是否曾访问该文件(由于缺少失败事件)。如果不是,则表明故障发生在文件访问之前,但请继续检查文件/目录权限以确保匿名IIS用户可以访问该文件。
使用Regedt32,在smtpsvg.dll上找到。检查密钥(和子密钥)的权限,并确保匿名用户具有读取权限。查找包含位置值和版本的class-id,并检查这些权限。
答案 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位。