2017-04-14 123 views
0

中的自定义.net程序集我一直在为此工作了几天,并取得了进展,但它仍然不能按我需要的方式工作。经典的ASP-错误0177:80004003

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

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

我已经做了第一类定义,在.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位/ 64位问题或权限问题,我已经尝试了许多不同的事情,这些日子太多无法重新计数,但任何建议将不胜感激

注意:

  • 服务器运行Windows Server 2012 R2
  • 我使用PowerShell将自定义dll添加到GAC。
  • 我正在使用regasm的32位版本。我尝试了64位版本,但是当这样做时,双方(.NET和Classic)都会出错。
  • 该网站使用的IIS应用程序池启用了32位,显然必须保持这种方式,因为该站点使用了其他第三方COM对象。
  • ComClass项目的属性
    • 编译:注册COM互操作被选中。目标CPU是“任何CPU”
    • 应用:目标框架设置为.NET框架4.5
    • 应用:设置为类库
    • 应用应用型,装配信息:请组装COM可见检查
  • 我添加在主站点项目由项目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 ... ] 
+0

我终于找到了一个asp错误代码的参考列表,它说80004003是一个“无效的指针”,它表明名称没有正确设置。 –

+0

BTW:在Windows脚本宿主中运行.vbs文件时出现同样的错误。 64位版本提供无效指针错误。 32位版本提供了无法创建ActiveX对象。 –

+0

我发现的其他东西是组件服务管理单元,当浏览自定义类库应用程序并查看包含的“组件”时,只列出了一个类。构建DLL的项目实际上有两个类(在VS中,我可以使用MyLibrary.MyClass或MyLibrary.ComClass) - 但在regasm完成后,只有MyClass显示在组件服务管理单元中。 –

回答

0

我终于搞定了......我试过的所有不同的东西显然是阻止我看到我在进一步的尝试中所做的任何改变。我这样说是因为今天我试着重新开始 - 我进入服务器并清理了我的程序集名称的所有事件的注册表,并且我从GAC中删除了它,在我能想到的任何地方。

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

我没有收到任何建议,但感谢任何给了我这种想法的人。