为什么NotesSession.GetDatabase()会返回null?

时间:2010-04-06 06:15:18

标签: lotus-notes lotus-domino interop-domino

我正在尝试在代码中打开names.nsf。这段代码已经工作了一段时间,但突然间,我变得空了。知道为什么吗?我似乎没有得到任何错误,我不知道如何弄清楚什么是错的。

我可以在同一台机器上从Notes客户端打开数据库。

更新

这是代码。字段在构造函数中初始化。空引用发生在.IsOpen()消息上。

public class DominoPersonSearcher
{
    private string _serverName;
    private string _databaseFileName;
    private string _password;
    private Domino.NotesDatabase OpenDatabase(out Domino.NotesSession notesSession)
    {
        notesSession = new Domino.NotesSessionClass();
        notesSession.Initialize(this._password);

        Domino.NotesDatabase notesDatabase;
        notesDatabase = notesSession.GetDatabase(this._serverName, this._databaseFileName, false);

        if (!(notesDatabase.IsOpen))
        {
            notesDatabase.Open();
        }
        return notesDatabase;
    }

此代码为C#并在Web服务器上运行;它不在数据库中 - 它在Notes之外运行,只是调用它。我已多次使用这种确切的机制。它使用名为Interop.Domino.dll的Lotus Domino Objects COM C:\ notes \ domobj.tlb的.NET包装器。 Domino安装在不同的服务器上。

2 个答案:

答案 0 :(得分:6)

从getdatabase返回null意味着您无法访问数据库。如果您将其作为Java代理运行,那么它将以您的权限运行。可以将服务器配置为限制谁可以通过服务器上的代理访问数据库。

尝试在服务器上打开您具有相同访问级别的数据库或您具有管理员访问权限的数据库。执行此操作,检查是否可以通过服务器上的代理打开数据库。如果您无法打开此数据库,则听起来像服务器的权限问题。它不是数据库本身,因为您可以通过Notes客户端访问它。

一种解决方法是,您也可以告诉代理在服务器的ID下运行。这通常会解决访问问题。代理的安全选项是“代理属性”对话框中的最后一个选项卡。请注意,此选项也可以通过服务器设置进行控制,如果您不允许这样做,也会收到错误消息。让我知道你怎么去..

答案 1 :(得分:1)

我遇到了同样的问题。我关闭了Lotus Mail,应用程序运行正常。

notesSession.GetDatabase(this._serverName, this._databaseFileName, false);

此处莲花邮件服务器已访问数据库。这就是为什么我们得到空值。

这不是特权问题。