2

コードで names.nsf を開こうとしています。コードの一部はしばらく機能していましたが、突然、null になりました。理由はありますか?エラーが発生していないようで、何が問題なのかを解決する方法がわかりません。

同じマシンのノーツ クライアントからデータベースを開くことができます。

アップデート

これがコードです。フィールドはコンストラクターで初期化されます。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# であり、Web サーバー上で実行されます。データベース内ではなく、Notes の外部で実行されており、呼び出しているだけです。私はこの正確なメカニズムを何度も使用してきました。これは、Interop.Domino.dll と呼ばれる Lotus Domino Objects COM C:\notes\domobj.tlb の周りに .NET ラッパーを使用します。Domino は別のサーバーにインストールされています。

4

2 に答える 2

7

getdatabase から null を返すということは、データベースにアクセスできなかったことを意味します。これを Java エージェントとして実行している場合は、あなたの権限で実行されます。サーバー上のエージェントを介してデータベースにアクセスできるユーザーを制限するようにサーバーを構成できます。

同じレベルのアクセス権を持つサーバー上の別のデータベース、または管理者アクセス権を持つデータベースを開いてみてください。これを行うと、サーバー上のエージェントを介してデータベースを開くことができるかどうかがチェックされます。このデータベースも開けない場合は、サーバーの権限に問題があるようです。ノーツ クライアント経由でアクセスできるため、データベース自体ではありません。

これを回避する 1 つの方法として、サーバーの ID で実行するようにエージェントに指示することもできます。これは通常、アクセスの問題を回避します。エージェントのセキュリティ オプションは、[エージェント プロパティ] ダイアログ ボックスの最後のタブです。このオプションはサーバー設定でも制御できることに注意してください。これも許可されていない場合は、エラー メッセージが表示されます。行き方教えて..

于 2010-04-06T11:20:36.407 に答える
2

私も同じ問題を抱えていました。Lotus Mail を閉じると、アプリケーションは正常に動作しました。

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

ここで、データベースはロータス メール サーバーによって既にアクセスされています。そのため、null 値を取得しています。

これは特権の問題ではありません。

于 2012-06-01T12:31:03.303 に答える