【问题标题】:How to open a Lotus Notes Database on a network share?如何在网络共享上打开 Lotus Notes 数据库?
【发布时间】:2012-11-07 20:55:53
【问题描述】:

我正在尝试通过 C# 与 Notes 数据库(我的个人邮件文件)进行交互,但我被卡在门外,试图使用以下代码打开数据库:

        string sNotesSourceFolder = "$Inbox";
        string sUserName = "scady";
        string sMailFile = @"NotesMail_FDrive\ARchives\" + sUserName + ".nsf";         
        string sServerName = @"Answers1/Answers";
        string sPassword = "xxxxxx";


        //Creating the notes session 
        NotesSession session = new NotesSession();
        session.Initialize(sPassword);
        NotesDatabase NotesDb = session.GetDatabase(sServerName, sMailFile, false);

        //If the database is not already open then open it. 
        if (!NotesDb.IsOpen)
        {
            NotesDb.Open();
        }

使用服务器名称和路径调用 session.GetDatabase(),nsf 文件返回 null,这显然意味着它无法打开数据库。

我在本地运行此代码,针对名为“Answers1/Answers”的 Notes 服务器。我现在正在考虑基于从 Notes 服务器,nsf 文件位于“NotesMail_FDrive\ARchives\xyz.nsf”的网络文件共享上。

【问题讨论】:

  • 请注意,访问网络共享上的 NSF 是不受支持的配置。这意味着虽然它应该可以工作,但从未为此设置测试/构建过。
  • 在与我们的 Notes 管理员交谈后,他解释说“需要一些工作”才能让 Domino 能够在网络文件共享上使用 nsfs,所以我现在想知道这是否是问题所在。邮件文件与 domino 服务器不在同一台机器上。有什么想法吗?
  • 如果 Notes 客户端可以打开数据库,那么使用 Notes API 编写的程序应该能够使用客户端看到的完全相同的服务器名称和路径名打开数据库,只要您使用的是两次尝试使用相同的 ID 文件。试试做个实验怎么样?只需尝试打开 names.nsf 或位于服务器数据目录中您至少具有读取权限的任何其他数据库。如果失败,那么你有某种访问问题。

标签: com lotus-notes


【解决方案1】:

文件所在的服务器是 Notes 服务器还是只是网络共享?

如果是网络共享,您需要驱动器映射,但 sServerName 将是“”以获取“本地”驱动器。我假设 Notesdata1 是 X 上的一个目录,所以如果它是驱动器名称,请将其删除。

string sMailFile = @"X:\Notesdata1\NotesMail\ARchives\scady.nsf";
string sServerName = @"";

如果它是 Notes 服务器并且 Notesdata1 是 Notes 服务器的数据目录,那么

string sMailFile = @"NotesMail\ARchives\scady.nsf";
string sServerName = @"Answers1/Answers";

【讨论】:

  • 看起来您上面的第二个选项应该是获胜的解决方案,但仍然没有运气。我开始认为这与被描述为不受支持的配置有关,其中邮件文件位于 Notes 服务器本身以外的机器上。
  • 如果邮件文件不在Notes 服务器上,则它更接近于前者而不是后者。您根本没有与 Notes 服务器交互。您的机器的 Notes.ini 文件中列出的数据目录是什么目录?存档目录是否在此路径中?
  • 在 X: 映射到 NotesMail_FDrive 时尝试设置 sMailFile = "X:\ARchives\scady.nsf"
  • 感谢所有回复的人。看起来(可耻地)这一直是身份验证的问题?如果我在运行之前在运行此代码的机器上打开 notes 客户端,那么一切正常——即使我随后关闭了客户端。我不完全确定为什么会这样。将此标记为已回答,因为此答案正确描述了访问存储在网络文件共享上的注释数据库所需的设置,这是我最初问题的重点。
【解决方案2】:

抱歉,我在第一遍时没有注意到这一点...

sMailFile 的值不应为“\10.10.10.71\notesdata1\NotesMail\ARchives\scady.nsf”。您注释掉的其他两个值也是错误的。 getDatabase 的参数是 Domino 服务器的专有名称和相对路径。没有服务器 IP,没有卷,也没有“文件:”前缀。就像这样:"archives\scady.nsf"。当您在 Notes 客户端中打开数据库并调出数据库属性对话框时,它应该与您看到的路径完全相同。

上一个答案

您的 sServername 变量应该包含 Domino 服务器的专有名称。

但是你为什么要使用 File.Exists? Domino 服务器希望独占访问其数据树中的所有文件。如果您实际上通过文件系统调用成功地访问了 Domino 服务器上的文件,那么您可能正在锁定 Domino 服务器,使其无法访问。

还有:你在哪里运行这段代码?您是否在同一台计算机上运行它,并且使用您通常用来阅读电子邮件的同一帐户?还是在不同的计算机和帐户上?

【讨论】:

  • 我只是使用 File.Exists 来确保从调用中“看到”文件没有问题。一旦我运行它,它可以/应该被删除。
  • 而且,我在同一台计算机上运行代码,并使用我用来通过 notes 客户端阅读邮件的帐户。
  • 好的。我已经更新了我的答案。但如果这还不够,您能否更新您的代码以显示您实际想要使用的代码是什么?代码中的另一个大问题是,您在注释行和非注释行中分配给 sMailFile 的每个值都是错误的。
  • @DavidNavarre - 然后你应该像本地一样打开,IE 服务器是空白的。您最好尝试使用映射到文件共享的驱动器,这样实际文件名是 R:\Archives\xyz.nsf。这是一种糟糕的做法,因为 Notes 旨在支持真正的本地文件或存储在服务器上的文件。存储在文件共享上的文件是 Notes 试图避免的混合体。
  • 这个问题措辞不当。在 11 月 9 日 17:16 对我的回答的评论中,他说“邮件文件位于笔记服务器本身以外的机器上”。我们是否应该编辑问题以澄清将来搜索此问题的人?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多