经典ASP客户端对象调用COM异常页面

经典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中找到一些其他信息。希望有些东西能帮助你解决你的问题。

+0

谢谢你的建议,我认为你是到一些东西,但我真的不能够解决这个问题。 – Mikael 2014-09-01 13:19:00

请首先咨询您的管理员,但对于此方案,您可以不设置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}) 

等等......