Wcf 用IIS7.5注册COM.dll(REGDB_E_CLASSNOTREG)

Wcf 用IIS7.5注册COM.dll(REGDB_E_CLASSNOTREG),wcf,iis-7.5,syswow64,Wcf,Iis 7.5,Syswow64,这个问题快把我逼疯了。我有一个WCF服务,它使用COM.dll(位于SysWOW64中)来执行一些操作。我在Windows 2008 R2上注册了它,但当服务部署到服务器上时,它就不起作用了。我的服务是为“任何cpu”编译的 当我创建一个控制台应用程序时,它工作得很好。我做错了什么?这是许可问题吗?我将应用程序池用户更改为管理员,但也不起作用。当我尝试将池更改为32位应用程序时,池崩溃或服务超时 错误消息是: System.Runtime.InteropServices.COM异常:检索CLSI

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

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

错误消息是:

System.Runtime.InteropServices.COM异常:检索CLSID为{47E736CA-3EEA-11D5-8400-00A0C9CA15AD}的组件的COM类工厂失败,原因是以下错误:80040154类未注册(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))。


有人能告诉我正确的方向吗?

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


您需要在IIS中创建新的应用程序池,转到
高级属性
并将
启用32位应用程序
设置为True。这将为您创建一个32位的应用程序池,您的COM dll将被找到。

我以前尝试过这个方法,但没有成功,因为应用程序池不断崩溃。一个新的应用程序池运行良好。谢谢