由Classic ASP页面调用的客户端对象的COM异常

时间:2014-08-29 11:01:34

标签: asp-classic com vb6 lotus-notes com-interop

我有棘手的问题,我正在努力解决这个问题。

当前的解决方案包含托管在某些Win2K3服务器上的经典ASP 网站,该网站在编码为的XP计算机上调用一些客户端 DLL强> VB6 即可。

然后,这些客户端DLL再次可以调用其他一些COM对象,在这种特殊情况下它会调用IBM Louts Notes(Lotus Domino Objects 1.2)。

现在由于不同的原因,这些 DLL必须转换为.NET(仍然是x86),在这个阶段,这是唯一要做的改变。除了抛出错误的一段代码外,这种方法效果很好。

COMException when calling the Lotus Notes COM object

调用DLL的ASP脚本

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。当我从控制台应用程序触发代码时,如果我还没有运行笔记,我会收到Notes UI,它要求我输入密码。

我相信我得到了例外,因为它最终会超时。

3 个答案:

答案 0 :(得分:0)

读取this article,处理Out Of Process COM组件,由于某种原因可能无法正确初始化。

另一种可能性是,自由线程组件不支持COM线程模型,.NET默认使用该组件编译。您可以使用STA属性编译DLL,但到目前为止我知道只有效果控制台应用程序。如果您还没有阅读它,可以在MS的this article中找到一些其他信息。希望有一些东西可以帮助你解决问题。

答案 1 :(得分:0)

首先咨询您的管理员,但是对于这种情况,您可以不为Lotus Notes使用的ID设置密码。

答案 2 :(得分:0)

我确实解决了这个问题,所以如果有其他人会参与其中...... 首先配置“Notes链接”组件服务作为“交互式用户”运行,并且进程所有者在“启动和激活权限”中具有权限。和"访问权限"。

然后这应该是可能的

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

等等......