经典中的自定义 .net 程序集 ASP- 错误 0177:80004003
Custom .net assembly in classic ASP- error 0177 : 80004003
我已经为此工作了好几天并取得了进展,但它仍然没有按照我需要的方式工作。
首先,这个项目正在使用一个现有的大型网站(100,000 多行代码分布在至少 200 多个文件中),用 classic asp(vbscript ) 并转换为 .NET 框架。
现有代码大部分使用 VBScript classes,我的计划是模仿 .NET 程序集中已经定义的十几个 classes新的 .NET 版本和现有的 Classic ASP 页面都可以使用 - 通过 COM+。
我已经创建了第一个 class 定义,在 .NET 中进行了复制,它在开发服务器上的 Test.ashx 页面中有效(当我在浏览器中转到该页面时,我得到预期输出)。但是我在调用 set obj = server.CreateObject("MyLibrary.MyClass")
.
的行的 Test.asp 页面 Server object error 'ASP 0177 : 80004003'
中收到错误调用
我已经像这样通过 regasm 注册了自定义 DLL regasm "C:\inetpub\siteroot\bin\MyLibrary.dll" /tlb /codebase
,它似乎工作正常(该库按预期出现在服务器的组件服务中,具有定义的方法,一切似乎都很好。
我的直觉告诉我,这要么是 32-bit/64-bit 问题,要么是权限问题。这些天我尝试了很多不同的事情,多到无法一一列举,但如果有任何建议,我将不胜感激。
备注:
- 服务器是运行WindowsServer 2012 R2
- 我使用 PowerShell 将自定义 dll 添加到 GAC。
- 我使用的是 32 位版本的 regasm。我尝试了 64 位版本,但这样做时,双方(.NET 和 Classic)都出错了。
- 该网站使用的 IIS 应用程序池启用了 32 位,显然由于该网站使用的其他一些第 3 方 COM 对象而必须保持这种状态。
- ComClass 项目上的属性
- 编译:已检查 COM 互操作注册。目标 CPU 是 "Any CPU"
- 应用程序:目标框架设置为 .NET Framework 4.5
- 应用程序:应用程序类型设置为 Class 图书馆
- 应用程序、程序集信息:选中使程序集 COM 可见
- 我在comClass项目
编译的MyLibrary.dll中添加了主站项目中的Reference
第一个 class 的 .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 到 "Publish" 引用自定义 DLL 的网站。它立即在我的 Test.ashx 页面上起作用。因此,我像以前一样使用 regasm(64 位)注册了 DLL,它也在 ASP 端工作!
我没有收到任何建议,但感谢任何对此有想法的人。
我已经为此工作了好几天并取得了进展,但它仍然没有按照我需要的方式工作。
首先,这个项目正在使用一个现有的大型网站(100,000 多行代码分布在至少 200 多个文件中),用 classic asp(vbscript ) 并转换为 .NET 框架。
现有代码大部分使用 VBScript classes,我的计划是模仿 .NET 程序集中已经定义的十几个 classes新的 .NET 版本和现有的 Classic ASP 页面都可以使用 - 通过 COM+。
我已经创建了第一个 class 定义,在 .NET 中进行了复制,它在开发服务器上的 Test.ashx 页面中有效(当我在浏览器中转到该页面时,我得到预期输出)。但是我在调用 set obj = server.CreateObject("MyLibrary.MyClass")
.
Server object error 'ASP 0177 : 80004003'
中收到错误调用
我已经像这样通过 regasm 注册了自定义 DLL regasm "C:\inetpub\siteroot\bin\MyLibrary.dll" /tlb /codebase
,它似乎工作正常(该库按预期出现在服务器的组件服务中,具有定义的方法,一切似乎都很好。
我的直觉告诉我,这要么是 32-bit/64-bit 问题,要么是权限问题。这些天我尝试了很多不同的事情,多到无法一一列举,但如果有任何建议,我将不胜感激。
备注:
- 服务器是运行WindowsServer 2012 R2
- 我使用 PowerShell 将自定义 dll 添加到 GAC。
- 我使用的是 32 位版本的 regasm。我尝试了 64 位版本,但这样做时,双方(.NET 和 Classic)都出错了。
- 该网站使用的 IIS 应用程序池启用了 32 位,显然由于该网站使用的其他一些第 3 方 COM 对象而必须保持这种状态。
- ComClass 项目上的属性
- 编译:已检查 COM 互操作注册。目标 CPU 是 "Any CPU"
- 应用程序:目标框架设置为 .NET Framework 4.5
- 应用程序:应用程序类型设置为 Class 图书馆
- 应用程序、程序集信息:选中使程序集 COM 可见
- 我在comClass项目 编译的MyLibrary.dll中添加了主站项目中的Reference
第一个 class 的 .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 到 "Publish" 引用自定义 DLL 的网站。它立即在我的 Test.ashx 页面上起作用。因此,我像以前一样使用 regasm(64 位)注册了 DLL,它也在 ASP 端工作!
我没有收到任何建议,但感谢任何对此有想法的人。