2015-02-11 16 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