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

时间:2017-04-14 12:50:52

标签: asp.net vbscript asp-classic com

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

首先,该项目采用经典的asp(vbscript)编写的现有大型站点(超过200多个文件的100,000多行代码)并转换为.NET框架。

现有代码大部分都使用VBScript类,我的计划是模拟已经定义到.NET程序集中的十几个类,这些类都包含新的.NET版本和现有的Classic ASP页面可以使用 - 通过COM +。

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

我已经通过regasm注册了自定义DLL,就像这个regasm "C:\inetpub\siteroot\bin\MyLibrary.dll" /tlb /codebase一样,它看起来工作正常(该库出现在服务器的组件服务中,正如预期的那样定义了方法,一切看起来都很好。

我的直觉告诉我它是32位/ 64位问题或权限问题。我已经尝试了许多不同的事情,这些事情太多而无法重述,但任何建议都会受到高度赞赏。

注意:

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

第一个类的.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 ... ]

1 个答案:

答案 0 :(得分:0)

我终于开始工作......我尝试过的所有不同的事情都让我无法看到我在进一步尝试中所做的任何改变。我这样说是因为今天我尝试重新开始 - 我进入服务器并清理了所有组件名称的注册表,并将其从GAC中删除,我无处不在。

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

我没有收到任何建议,但感谢任何想过这个想法的人。