2

这个问题快把我逼疯了。我有一个 WCF 服务,它使用 COM .dll(位于 SysWOW64 中)来执行一些操作。我在 Windows 2008 R2 上注册了它,但是当服务部署在服务器上时它不起作用。我的服务是为“任何 cpu”编译的。

当我创建一个控制台应用程序时,它工作正常。我究竟做错了什么?是权限问题吗?我将应用程序池用户更改为管理员,但也不起作用。当我尝试将池更改为 32 位应用程序时,池崩溃或服务超时。

错误信息是:

System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {47E736CA-3EEA-11D5-8400-00A0C9CA15AD} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

谁能指出我正确的方向?

4

1 回答 1

4

那是因为您的 COM DLL 是 32 位的。SysWOW64 适用于 64 位 Windows 上的 32 位组件。您的控制台应用程序可以工作,因为它是作为 x86 构建的(检查项目属性),但 IIS 应用程序池是 64 位的。

您需要在 IIS 中创建一个新的应用程序池,转到Advanced Properties并设置Enable 32-Bit Applications为 True。这将为您创建一个 32 位应用程序池,并且您的 COM dll 将被找到。

于 2011-08-13T16:31:07.063 回答