2015-02-11 78 views
0

我需要从Silverlight程序中引用Com DLL。由于这是不允许的,我创建了一个wcf服务,并将其引用到Com中。 当我从本地机器运行我的wcf服务时,这个想法似乎工作正常,但是当我将服务发布到我的服务器时,它失败了。错误是“对象引用未设置为对象的实例”,我尝试实例化该DLL。 这里问题行是 m_cloVB6Encryption =新的VB6Encryption.c加密如何在WCF服务中引用Com对象

VB6加密是一个复杂的。它调用另一个调用其他几个DLL的DLL。

要尝试找出我创建了一个非常简单的VB6组件的问题,这个时候,我得到了错误 “检索COM类工厂CLSID组件{74FE605A-5861-41A0-BA13-27DDD9C2EBB8}失败,原因是以下错误:80040154类未注册(异常来自HRESULT:0x80040154(REGDB_E_CLASSNOTREG))。“

尽管事实上我手动注册了组件并且它成功了。

问题行是cloSimple = New Simple.cSimple。

我的电脑运行Windows 7;该服务器运行Windows Server 2012 R2 Standard。

回答

0

推测你的COM组件被构建为32位...所以当你注册时它被注册为(InProc)32位COM组件......(并且只能由32位应用程序加载)。

您的ASP.NET网站很可能运行在设置为64位的AppPool中,因此它无法使用32位COM类。

有2个选项(最明确,最简单的就是选项1):

1)让您的IIS网站/应用程序作为32位运行,因此它可以访问您已注册的32位COM组件。

为了确保您的网站也以32位的方式运行(而不是64位)...更改DefaultAppPool以启用32位应用程序(或者您可以创建一个新的专用于该web服务/站点的32位AppPool,并使其使用它...如果你不想影响其他网站)。

OR

2)做一些额外的注册,使您的COM类是提供给客户64位太(您注册,以便它在运行过程出来......所以它可以由32位或64位客户端使用,但是您可能不希望出于性能原因...并且可能并不总是可能的)

+0

我分心了其他优先事项。我会尽快回复并尝试你的想法。谢谢 – 2015-02-20 17:08:25

+0

我尝试了你的#1,它为我工作。写得很好,很清楚,很容易遵循。 – 2015-02-23 20:31:02

相关问题