2011-08-13 194 views
2

这个问题让我疯狂。我有一个WCF服务,它使用COM .dll(位于SysWOW64中)来执行一些操作。我在Windows 2008 R2中注册了它,但是在服务器上部署服务时它并不工作。我的服务是为“任何CPU”编译的。用IIS7.5注册COM .dll(REGDB_E_CLASSNOTREG)

当我创建一个控制台应用程序它工作正常。我究竟做错了什么?这是一个许可问题吗?我将应用程序池用户更改为管理员,但也没有任何工作。当我尝试将池更改为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

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

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

+0

我之前尝试过,但没有工作,因为应用程序池不断崩溃。新的应用程序池运行良好。谢谢! – cosss