无法使用 IIS 7 从 Web 服务调用 COM 组件

Posted

技术标签:

【中文标题】无法使用 IIS 7 从 Web 服务调用 COM 组件【英文标题】:Can't call COM Component from Web Service with IIS 7 【发布时间】:2015-03-20 09:01:31 【问题描述】:

我有一个第三方 COM 组件,它被称为 Web 服务。虽然这适用于我的开发机器,但我在生产服务器上遇到了这个异常:

检索具有 CLSID 的组件的 COM 类工厂 6B7271AE-39C7-4C9E-B75F-6EDFCDBD623D 由于以下错误而失败: 80040154 类未注册(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))。

服务器:Win 2008 R2 Enterprise,64 位

IIS:版本 7.5.7600.16385

我检查的内容

注册表项

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\6B7271AE-39C7-4C9E-B75F-6EDFCDBD623D

存在于生产服务器上并指向正确的 DLL (C:\Program Files (x86)...\xyz.DLL

(注册表中没有其他具有此 GUID 的 CLSID 条目)

第三方的测试程序在生产服务器上运行正常

(所以 COM DLL 工作正常)

我尝试了什么

一个(C#/.Net)控制台应用程序可以在生产服务器上正确调用COM组件。

(所以 .Net interop 和 com 注册都可以)

如果在我的开发机器上运行,网络服务可以调用 COM 组件。

(所以程序逻辑没问题)

Ich bin mit meinem Latein am Ende

(德语为:我束手无策)

【问题讨论】:

您能确认您的应用程序池是 32 位的吗?在 AppPool 的高级设置中勾选Enable 32-Bit Applications 这就是解决方案!谢谢 【参考方案1】:

这里提到:web service with com Peter Hahndorf 给出的答案很简单:

IIS 应用程序池设置Enable 32 Bit Applications 必须为真。

(IIS->应用程序池->设置应用程序池默认值)

然后web服务就可以访问COM组件了。

【讨论】:

以上是关于无法使用 IIS 7 从 Web 服务调用 COM 组件的主要内容,如果未能解决你的问题,请参考以下文章

使用IIS7 URL重写将请求转发到内部Web服务器的虚拟目录

无法从另一个 7.5 连接到 IIS 7.5

无法在 IIS 中托管 Web 服务

无法使用来自 IIS 的权限为 SSL/TLS 建立安全通道

从 MVC / IIS Web 应用程序向子域提供服务

无法连接到web服务器 IIS Express 解决办法