经典ASP客户端对象调用COM异常页面
我有棘手的问题,我正在努力相当多。经典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,它会要求我输入密码。
我相信我得到异常,因为它最终超时。
有this article读,你处理的是一个进程外COM组件可能因某些原因无法正常初始化。
另一种可能性是COM线程模型在.NET默认编译的免费线程组件中不受支持。你可以用STA属性编译你的DLL,但是我知道只有效果控制台应用程序。如果您还没有阅读过,您可以在MS的this article中找到一些其他信息。希望有些东西能帮助你解决你的问题。
请首先咨询您的管理员,但对于此方案,您可以不设置Lotus Notes使用的标识的密码。
我确实解决了这个问题,所以如果有其他人会运行这个... 首先配置“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})
等等......
谢谢你的建议,我认为你是到一些东西,但我真的不能够解决这个问题。 – Mikael 2014-09-01 13:19:00