经典 ASP 中的自定义 .net 程序集 - 错误 0177:80004003



我已经为此工作了几天并取得了进展,但它仍然没有按照我需要的方式工作。

首先,这个项目是采用一个现有的大型网站(100,000+行代码分布在至少200+个文件中),用经典asp(vbscript)编写并转换为.NET框架。

现有代码在大多数情况下使用 VBScript 类,我的计划是通过 COM+ 模仿已定义为 .NET 程序集的十几个类,新的 .NET 版本和现有的经典 ASP 页都可以使用。

我已经做了第一个类定义,在 .NET 中复制,它在开发服务器上的 Test.ashx 页面中工作(当我在浏览器中转到该页面时,我得到了预期的输出)。但是我收到一个错误,从 Test.asp 页面Server object error 'ASP 0177 : 80004003'调用set obj = server.CreateObject("MyLibrary.MyClass")的行上

。我已经像这样通过 regasm 注册了自定义 DLLregasm "C:inetpubsiterootbinMyLibrary.dll" /tlb /codebase它似乎工作正常(该库按预期使用定义的方法出现在服务器的组件服务中,一切似乎都很好。

我的直觉告诉我,这要么是 32 位/64 位问题,要么是权限问题。这些天来,我尝试了许多不同的事情,这些事情太多了,无法一一列举,但任何建议将不胜感激。

笔记:

  • 服务器正在运行 Windows Server 2012 R2
  • 我使用 PowerShell 将自定义 dll 添加到 GAC。
  • 我使用的是 32 位版本的 regasm。我尝试了 64 位版本,但在这样做时,双方(.NET 和经典)都出错了。
  • 站点使用的 IIS 应用程序池已启用 32 位,并且由于站点使用的其他一些第三方 COM 对象,显然必须保持这种状态。
  • ComClass 项目的属性
    • 编译:选中"注册 COM 互操作"。目标 CPU 是"任何 CPU">
    • 应用程序:目标框架设置为 .NET Framework 4.5
    • 应用程序
    • :应用程序类型设置为类库
    • 应用程序、程序集信息:选中"使程序集 COM 可见"处于选中
    • 状态
  • 我在主站点项目中向 MyLibrary 中添加了一个引用.dll由 ComClass 项目编译

第一个类的.vb文件的顶部如下

Imports System
Imports System.Web
Imports System.Web.HttpContext
Imports System.String
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Runtime.InteropServices
Imports System.EnterpriseServices
<Assembly: ApplicationName("MyLibrary")>
<Assembly: ApplicationActivation(ActivationOption.Server)>
<Assembly: ApplicationAccessControl(False, AccessChecksLevel:=AccessChecksLevelOption.ApplicationComponent)>
<ComClass(MyClass.ClassId, MyClass.InterfaceId, MyClass.EventsId), ProgId("MyLibrary.MyClass")>
Public Class MyClass
Inherits ServicedComponent
[GUIDS]
[subs and functions ... ]

我终于让它工作了......我尝试的所有不同的事情显然都阻止了我看到我在进一步尝试中所做的任何更改。我这样说是因为今天我尝试重新开始 - 我进入服务器并清理了注册表中所有出现的程序集名称,并将其从 GAC 中删除,在我能想到的任何地方。

然后,在我的本地计算机上,我使用Visual Studio"发布"引用自定义DLL的网站。它立即在我的Test.ashx页面上工作。因此,然后我像以前一样使用 regasm(64 位)注册了 DLL,并且它也在 ASP 方面工作!

我没有收到任何建议,但感谢任何对此有所考虑的人。

最新更新