2

我正在尝试在代码中打开 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 之外运行,只是调用它。我已经多次使用这种确切的机制。它使用一个围绕 Lotus Domino Objects COM C:\notes\domobj.tlb 的 .NET 包装器,称为 Interop.Domino.dll。Domino 安装在不同的服务器上。

4

2 回答 2

7

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

尝试在您具有相同访问级别的服务器上打开另一个数据库,或者打开您具有管理员访问权限的数据库。这样做,检查您是否可以通过服务器上的代理打开数据库。如果你也无法打开这个数据库,那么听起来像是服务器的权限问题。它不是数据库本身,因为您可以通过 Notes 客户端访问它。

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

于 2010-04-06T11:20:36.407 回答
2

我有同样的问题。我关闭了 Lotus Mail,应用程序运行良好。

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

这里的数据库已经被 Lotus 邮件服务器访问。这就是我们得到空值的原因。

这不是特权问题。

于 2012-06-01T12:31:03.303 回答