我试图在代码中打开names.nsf。这段代码已经工作了一段时间,但突然间,我变得空了。任何想法为什么?我似乎没有得到任何错误,我不知道如何解决什么是错的。为什么NotesSession.GetDatabase()可能返回null?
我可以从同一台机器上的Notes客户端打开数据库。
UPDATE
这是代码。这些字段在构造函数中初始化。空引用发生在.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对象COM C:\ notes \ domobj.tlb调用Interop.Domino.dll的.NET包装器。 Domino安装在不同的服务器上。
这不是一个代理:我使用多米诺COM对象。我使用的是我登录时使用的相同ID - 我只提供密码,并使用最后登录的用户。事情是,它工作 - 我没有改变我的任何代码。好吧,无论如何,这不是。它只是导致它返回null的安全性吗? – ssg31415926 2010-04-06 18:58:25
我现在需要知道你是如何构建你的代码的。代码从哪里运行?我假设它仍然在笔记数据库中被调用,就像表单或视图一样?应该可以解决问题。是的,这听起来像是迄今为止服务器的权限问题。 我仍然建议您在另一个数据库上运行相同的代码,以查看是否遇到同样的问题。只需将文件名(“names.nsf”)替换为同一台服务器上的另一个数据库文件即可。 names.nsf通常只对用户具有读者访问权限,因为它是Domino服务器上用户管理的主干。 – giulio 2010-04-07 04:02:58
我看过代码。它看起来很好。那么,你有没有尝试用相同的代码在同一台服务器上打开另一个数据库? 我现在进入“调试模式”,通过使用print语句来检查我传递的参数的值,以确保它们是正确的。我没有做太多的COM,但它不应该是区分大小写的文件名。 – giulio 2010-04-07 22:02:06