我有棘手的问题,我正在努力解决这个问题。
当前的解决方案包含托管在某些Win2K3服务器上的经典ASP 网站,该网站在编码为
然后,这些客户端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,它要求我输入密码。
我相信我得到了例外,因为它最终会超时。
答案 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})
等等......