2014-08-29 57 views
1

我有棘手的問題,我正在努力相當多。經典ASP客戶端對象調用COM異常頁面

目前的解決方案,包括一個經典ASP網站託管一些WIN2K3服務器上,調用一些客戶端 DLL XP計算機上在VB6編碼的。

這些客戶端DLL然後可以再次調用一些其他COM對象,在這種特殊情況下它會調用IBM Louts Notes(Lotus Domino Objects 1.2)。

現在由於不同的原因,這些DLL必須轉換爲.NET(仍然x86),在這個階段,這是唯一要做的改變。除了一段引發錯誤的代碼之外,這種方法效果很好。

COMException when calling the Lotus Notes COM object

ASP腳本調用DLL

Set objLotus = CreateObject("OpenLotusNotes_FU_v2.clsMain") 
sRet = objLotus.OpenLotus_mail() 

客戶端DLL

Dim session As NotesSession = New NotesSession() 'works well 
Dim objNotesWrkSp As Object 
objNotesWrkSp = Activator.CreateInstance(Type.GetTypeFromProgID("Notes.NotesUIWorkspace")) 'crashes 

異常

Retrieving the COM class factory for component with CLSID {29131502-2EED-1069-BF5D- 
00DD011186B7} failed due to the following error: 80080005 
Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).

當我嘗試在同一臺計算機上的控制檯應用程序中運行此代碼時,它的工作原理爲。所以它必須有一些權限(?),我試圖改變基本上我能想到的一切。

任何幫助將不勝感激!

更新2014年9月1日

我看到的是,當我從觸發ASP代碼,是它創建每次新工藝,但只在後臺運行,沒有用戶界面什麼那麼。當我從控制檯應用程序觸發代碼時,如果我還沒有運行筆記,我會得到Notes UI,它會要求我輸入密碼。

我相信我得到異常,因爲它最終超時。

回答

0

this article讀,你處理的是一個進程外COM組件可能因某些原因無法正常初始化。

另一種可能性是COM線程模型在.NET默認編譯的免費線程組件中不受支持。你可以用STA屬性編譯你的DLL,但是我知道只有效果控制檯應用程序。如果您還沒有閱讀過,您可以在MS的this article中找到一些其他信息。希望有些東西能幫助你解決你的問題。

+0

謝謝你的建議,我認爲你是到一些東西,但我真的不能夠解決這個問題。 – Mikael 2014-09-01 13:19:00

0

請首先諮詢您的管理員,但對於此方案,您可以不設置Lotus Notes使用的標識的密碼。

0

我確實解決了這個問題,所以如果有其他人會運行這個... 首先配置「Notes Link」組件服務作爲「交互式用戶」運行,並且進程所有者具有「啓動和「激活權限」和「訪問權限」。

那麼這應該是可能的

Dim objNotesWrkSp As Object 
Dim objWorkspace As Type = Type.GetTypeFromProgID("Notes.NotesUIWorkspace") 
objNotesWrkSp = Activator.CreateInstance(objWorkspace) 

正如在這種特殊情況下橫空出世,我只能得到它與後期綁定,當我試圖這樣,它只是開了一個conhost.exe過程工作,那麼從來沒有迴應:

Dim session as New NotesSession 
session.Initialize() 

在其他類似的問題......所以我只使用後期綁定所有與Notes的通信。

Dim mailServerPath, mailFile As String 
objWorkspace.InvokeMember("OpenDatabase", Reflection.BindingFlags.InvokeMethod, Nothing, objNotesWrkSp, New Object() {mailServerPath, mailFile}) 

等等......