【发布时间】:2011-01-07 08:09:35
【问题描述】:
我们有一个在 Windows Small Business Server 2008 SP2(64 位)上运行的 asp.net Web 服务。它位于自己的应用程序池中。我们已经尝试了托管管道模式的集成和经典设置。启用 32 位应用程序设置为 True。它无法成功调用 vb6 dll 方法,但同一台机器上的 Windows 窗体应用程序可以。
实例化了两个 vb6 dll(A 和 B)。 A 中的方法作为其参数之一传递了对 B 的引用。然后该方法调用自身内部的其他方法,这些方法也需要对 B 的引用。
A 中的那些内部方法调用失败并出现此 vb6 错误(A 方法将这些错误记录在 Windows 应用程序事件日志中):
70(权限被拒绝)
Windows 系统事件日志中还记录了另一个错误:
机器默认权限设置不会将 CLSID {xxx} 的 COM 服务器应用程序的本地激活权限授予来自地址 LocalHost (使用 LRPC)。可以使用组件服务管理工具修改此安全权限。
有问题的对象(第三个 vb6 组件,它是一个 ActiveX EXE)已经使用 DCOMCNFG(组件服务)进行了配置,并为 NETWORK SERVICE 甚至每个人提供了完整的启动、激活和访问权限。此外,从 Explorer 开始,所有必需的 vb6 组件都被赋予了对 NETWORK SERVICE 的完全控制/权限(每个人都试过了)。
同一台机器上的 Windows 窗体应用程序能够成功调用 A 中的方法。相同的 Web 服务在另一台具有 32 位操作系统的机器上工作。
Web 服务和 Forms 应用均已构建,平台目标设置为“x86”。
我们如何才能让 Web 服务调用在 64 位机器上工作?
【问题讨论】:
-
由于 Web 服务器 (IIS) 是 64 位软件,您可能会遇到不兼容的问题。即使启用了兼容模式,也只是在操作系统级别。我不知道 IIS 有能力处理调用。
-
让我澄清一下:Web 服务能够调用 A (vb6) 中的方法,但随后方法 A 无法通过 Web 服务传递给它的 B 引用调用其他 vb6 方法。
标签: asp.net com vb6 web-services windows-server-2008