经典ASP在64位模式下和.NET COM DLL注册问题

3

我正在运行Windows 2008 Server x64上的Classic ASP,以64位模式运行。 ADODB在64位下与Classic ASP正常运行。但是我的.NET COM DLL出了问题。 我创建了一个.NET COM DLL,其中包含以下代码:

using System.Runtime.InteropServices;
namespace TestNamespace
{
    [Guid("C446E97E-B415-4677-B99E-9644657FC98"),
    ProgId("TestNamespace.TestClass"),
    ComVisible(true)]
    public class TestClass
    {
        [ComVisible(true)]
        public void TestMethod(string s)
        {
            //some code that uses System.Messaging to send a message
        }
    }
}

这个DLL是为“任何CPU”编译的。在ASP中,我创建对象并执行方法:

Set test = Server.CreateObject("TestNamespace.TestClass")
test.TestMethod("test string")
Set test = Nothing

我正在使用RegAsm注册DLL:

%windir%\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /tlb /codebase TestNamespace.dll

在x86平台上,ASP和DLL运行良好。在Windows 2008服务器上,我尝试了以下操作:
  • 为x64编译DLL并使用...\Framework64\v2.0.50727\RegAsm.exe进行注册
  • 为不同的平台编译并放置在不同的位置,包括GAC
  • 还有更多的尝试
错误情况如下:
  • Microsoft VBScript runtime error '800a01ad' Server.CreateObject Failed
  • Server object error 'ASP 0177 : 80070002' Server.CreateObject Failed
  • Server object error 'ASP 0177 : 800401f3' Server.CreateObject Failed
  • Server object error 'ASP 0177 : 80131040' Server.CreateObject Failed
唯一能让它在Windows 2008服务器x64上工作的方法是将ASP应用程序池切换到32位模式。但我需要它在64位下工作! 我认为问题不在于权限,因为32位已经可以工作。 有没有人在经典ASP和.NET COM同时运行在64位时有过经验?

发现在该方法中使用System.Messaging时一切正常。一个消费消息的Windows服务已经为x64平台创建并安装,可以正常工作使用System.Messaging。 很可能是64位asp.dll进程存在问题。 - Viktor Jevdokimov
2个回答

1
“但我需要它在64位系统中运行!”为什么?您将无法将任何32位DLL加载到64位进程中,如果您需要进行这样的通信,您将需要跨进程进行-这是您想要的吗?您计划如何使用额外的地址空间? Rick Byers的这篇博客文章涉及您尝试转向64位的主题。 如果您真的相信这是您时间的好投资,这里有一篇关于64位COM内部的文章,可以从基本原理上帮助您弄清楚它。

我和你一样,也有尽快升级到64位并摆脱所有旧的<64位系统的冲动,但有时候如果没有问题就不要去修复它。


1
发现,一切都很好,直到在方法中使用System.Messaging。一个消费消息的Windows服务,为x64平台创建和安装,使用System.Messaging正常工作。可能是64位asp.dll进程的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接