【问题标题】:Can I read a notes.ini parameter from a different server?我可以从不同的服务器读取 notes.ini 参数吗?
【发布时间】:2016-03-02 19:27:14
【问题描述】:

我想知道我是否能够在服务器 A 上运行的代理中打开服务器连接以访问服务器 B 的 notes.ini。我想检查该 notes.ini 中的参数。这可以通过编码实现吗? 我知道 session.getEnvironment 方法,但它们访问运行代理的服务器(或 Notes 客户端)的 notes.ini。 有什么想法吗?

使用了 Egor 的解决方案:

/**
 * checks for notes.ini value for
 * @return
 * @throws NotesException
 */
private boolean checkNoSessionInfo(String serverName) {
    boolean result = false;
    try {
        String console = session.sendConsoleCommand(serverName, "show config *");
        result = console.contains("LOG_DISABLE_SESSION_INFO=1");
    } catch (NotesException e) {
        oli.logErrorEx(e, "Could not check if server's user session info was disabled", OpenLogItem.SEVERITY_MEDIUM, null);
    }
    return result;
}

像魅力一样工作! :-)

谢谢大家!

【问题讨论】:

    标签: lotus-domino


    【解决方案1】:

    尝试在 names.nsf 中将服务器 A 添加到服务器 B 服务器文档的受信任服务器(可能还有安全选项卡上的其他几个字段)。在我使用 Session.sendConsoleCommand 方法之后(使用命令“show config *”。请参阅文档以供参考:https://www-01.ibm.com/support/knowledgecenter/SSVRGU_9.0.1/com.ibm.designer.domino.main.doc/H_SENDCONSOLECOMMAND_METHOD_SESSION_JAVA.html

    【讨论】:

    • 是的,这行得通。如果你想得到 f.e. Notes\Data 文件夹,您将调用 Session.sendConsoleCommand("Server1/ACME", "show config Directory")
    • 是的,已确认 - 效果很好。我更新了我的问题并添加了我的解决方案。
    • FWIW,我不认为你真的需要受信任的服务器权限。我认为唯一需要该权限的情况是 ServerA 上的代理需要访问 ServerB 上的数据库 - 在这种情况下,ServerB 的服务器文档必须在 Trusted Servers 字段中列出 ServerA。
    • 附带说明,show config Directory 命令的输出将显示在服务器日志中。为防止此前缀带有感叹号的命令,例如!show config Directory。这样只会显示命令本身(另请参阅Log_Console INI 设置)。
    【解决方案2】:

    这有几个问题:

    1. 您需要服务器 A 上的服务器 B 的 NotesSession 对象,这是不可能的。
    2. 很遗憾,您无法从服务器 A 在服务器 B 上执行代理,它只是不起作用: 02.03.2016 10:51:05 Agent 'TestRunAgent' error: Cannot access foreign servers when running on a server)
    3. 最好的办法是从服务器 A 到服务器 B 的 HTTP 调用,这样服务器 B 代理可以返回带有所需属性的 HTML。

    您可以使用 print 关键字返回简单的 HTML 正文,它可以方便地打印到 HTTP 响应。

    【讨论】:

    • 是的,也发现了 - 会检查!
    • Java 代理可以打开远程会话对象(通过 DIIOP)并在远程服务器的上下文中运行代码。但是,需要在远程服务器上设置 DIIOP。
    【解决方案3】:

    理论上,我认为应该可以通过在服务器 B 上调用 Web 服务、自定义 REST servlet 或 XAgent 来做到这一点。这将返回您需要的信息。

    【讨论】:

    • 它不是 Web 应用程序,也没有运行 HTTP - 将尝试 sendConsoleCommand 方法
    • 也许代理无法使用例如创建 HTTP 会话。如果 HTTP 没有在服务器 A 上运行,则 ApacheHTTPClient 类。如果 HTTP 没有在服务器 B 上运行,那肯定无济于事。
    猜你喜欢
    • 2016-04-17
    • 2021-03-05
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多