2010-04-06 6 views
2

코드에서 names.nsf를 열려고합니다. 코드 조각은 잠시 동안 작동했지만 갑자기 null이 발생합니다. 왜 그런가? 나는 어떤 오류가있는 것 같지 않고 잘못된 것을 해결하는 방법을 모른다.NotesSession.GetDatabase()가 null을 반환하는 이유는 무엇입니까?

동일한 컴퓨터의 Notes 클라이언트에서 데이터베이스를 열 수 있습니다.

업데이트

다음은 코드입니다. 필드는 생성자에서 초기화됩니다. null 참조는 .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#이며 웹 서버에서 실행됩니다. 그것은 db 내부가 아닙니다. Notes 외부에서 실행 중이며, 그냥 호출하는 것입니다. 이 정확한 메커니즘을 여러 번 사용했습니다. Interop.Domino.dll이라는 Lotus Domino Objects COM C : \ notes \ domobj.tlb에서 .NET 래퍼를 사용합니다. Domino가 다른 서버에 설치되었습니다.

답변

6

getdatabase에서 null을 반환하면 데이터베이스에 액세스 할 수 없다는 의미입니다. 자바 에이전트로 실행하고 있다면 권한으로 실행됩니다. 서버는 에이전트를 통해 데이터베이스에 액세스 할 수있는 사용자를 제한하도록 구성 할 수 있습니다.

동일한 수준의 액세스 권한이 있거나 관리자 권한이있는 데이터베이스가있는 서버에서 다른 데이터베이스를 열어보십시오. 이렇게하면 서버의 에이전트를 통해 데이터베이스를 열 수 있는지 확인합니다. 이 데이터베이스를 열 수 없으면 서버 사용 권한 문제 인 것 같습니다. Notes 클라이언트를 통해 액세스 할 수 있기 때문에 데이터베이스 자체는 아닙니다.

한 가지 방법은 에이전트에게 서버의 ID로 실행되도록 알릴 수 있다는 것입니다. 일반적으로 액세스 문제가 발생합니다. 에이전트의 보안 옵션은 "에이전트 속성"대화 상자의 마지막 탭입니다. 이 옵션은 서버 설정을 통해 제어 할 수도 있으며,이 작업을 수행 할 수 없다면 오류 메시지가 표시됩니다. 내가 어떻게하는지 알게 해 ..

+0

에이전트가 아닙니다. 나는 도미노 COM 개체를 사용하고 있습니다. 내가 로그인 한 ID와 동일한 ID를 사용하고 있습니다. 비밀번호 만 입력하고 마지막으로 로그온 한 사용자 만 사용합니다. 문제는, 작동 중입니다. 나는 내 코드를 변경하지 않았습니다. 어쨌든,이 비트가 아닙니다. null를 돌려주는 것은 일까? – ssg31415926

+1

지금 코드를 구조화하는 방법을 알아야합니다. 이 코드는 어디에서 실행됩니까? 나는 그것이 폼이나 뷰와 같은 노트 데이터베이스 내에서 여전히 호출되고 있다고 가정하고 있습니까? 문제를 일으킬 수 있어야합니다. 그리고 예, 지금까지 서버 사용 권한 문제로 들립니다. 다른 데이터베이스에서 동일한 코드를 실행하여 동일한 문제가 발생하는지 확인하는 것이 좋습니다. 파일 이름 ("names.nsf")을 동일한 서버의 다른 db 파일로 대체하십시오. names.nsf는 일반적으로 Domino 서버의 사용자 관리를위한 백본이므로 사용자에 대한 독자 액세스 권한 만 갖습니다. – giulio

+0

코드를 살펴 봤습니다. 좋아 보인다. 그래서 같은 코드로 같은 서버에서 다른 데이터베이스를 열어 보았습니까? 필자는 올바른지 확인하기 위해 전달중인 매개 변수의 값을 확인하기 위해 print 문을 넣어서 "디버그 모드"로 들어갑니다.COM으로 많은 일을하지는 않았지만 대소 문자를 구분하지 않아야합니다. – giulio

1

나는 같은 문제가 있었다. Lotus Mail을 닫았으며 응용 프로그램이 정상적으로 작동했습니다.

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

여기 데이터베이스는 이미 lotus 메일 서버에서 액세스합니다. 이것이 우리가 null 값을 얻는 이유입니다.

권한상의 문제는 아닙니다.

관련 문제