COM Exception for client-side object called by Classic ASP page

1

I have tricky problem, which I'm struggling quite a bit with.

The current solution, consists of a Classic ASP site hosted on some Win2K3 server, that calls some Client-side DLL's on XP machines coded in VB6.

These client-side DLL's then again can call some other COM objects, in this particular case it calls IBM Louts Notes (Lotus Domino Objects 1.2).

Now for different reasons these DLL's has to be converted to .NET (still x86), at this stage, this is the only change to be done. This works quite well except for one piece of code which throws an error.

COMException when calling the Lotus Notes COM object

ASP script calling the DLL

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

Client-side DLL

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

Exception

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)).

When I try to run this code in console application on the same computer, it works. So it has to be some permissions(?), I have tried changing basically everything I can think of.

Any help would be much appreciated!

Updated 01.09.2014

What I see is when I trigger the code from ASP, is that it creates a new process of Notes everytime, but only in the background, no UI what so ever. When I trigger the code from a console application, I get the Notes UI, which asks me for password, if I don't already have notes running.

I believe that I'm getting the Exception because it eventually times out.

asp-classic
com
vb6
lotus-notes
com-interop
asked on Stack Overflow Aug 29, 2014 by Mikael • edited Sep 1, 2014 by Mikael

3 Answers

0

Have a read of this article , your dealing with an Out Of Process COM component which may not initialize properly for some reason.

Another possibility is that the COM threading model is not supported in a free threaded component which .NET is by default compiled with. You can compile you DLL with a STA attribute, but as far am I'm aware that only effects console applications. You might find some additional information in this article from MS, if you have not already read it of course. Hope something there helps you solve your problem.

answered on Stack Overflow Aug 31, 2014 by Bigtoe
0

Consult with your admins first, but for this scenario you can set no password for the ID the Lotus Notes uses.

answered on Stack Overflow Sep 4, 2014 by Frantisek Kossuth
0

I did resolve this, so if anyone else would run in to this… First of all configure the “Notes Link” Component Service to run as a “The interactive user” and that the process owner has permissions in "Launch and Activation Permissions" and "Access permissions".

Then this should be possible

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

As it turned out in this particular case I could only get it to work with late-binding, when I tried to this it just opened a conhost.exe process and then never responed:

Dim session as New NotesSession
session.Initialize()

Among other similar issues... So then I only used late-binding for all communication with Notes.

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

And so on...

answered on Stack Overflow Sep 10, 2014 by Mikael

User contributions licensed under CC BY-SA 3.0