【问题标题】:How linux daemon will read xml file in worker service .Net Core 3.1linux守护进程如何读取worker服务.Net Core 3.1中的xml文件
【发布时间】:2020-05-30 05:53:49
【问题描述】:

我正在使用.Net Core 中的新worker service 项目模板。从配置文件中读取凭据。 windows机器中的配置文件位置"D:/LC2/Files/Config.xml".

当我将worker service 运行为linux daemon 时,linux 将如何读取配置文件?因为只有windows 机器的路径可用,而不是linux

这是我读取配置文件的代码

static List<intervalValue> GetConfig()
{
    XmlDocument doc = new XmlDocument();
    doc.Load("D:/LC2/Files/Config.xml");
    XmlNode node = doc.DocumentElement.SelectSingleNode("/parameters/intervalValue");
    {
        for (int i = 0; i < node.ChildNodes.Count; i++)
        {
            IntervalTypeList.Add(new intervalValue { Name = node.ChildNodes[i].Attributes["Name"].Value);
        }
    }
    return IntervalTypeList;
}

我该如何解决这个问题?

【问题讨论】:

    标签: .net linux asp.net-core .net-core daemon


    【解决方案1】:

    您说得对,Linux 守护程序将无法读取 Linux 上不存在的路径。

    您可以查看以下几种方法:

    1. 您的服务可以查看操作系统并在 Linux 上读取不同的路径/文件。例如,对于 Windows,您正在读取硬编码位置 @'D:\LC2\Files\Config.xml',而在 Linux 上,您可以使用另一个硬编码位置,例如 /opt/LC2/config.xml

    2. 您可以为工作服务提供参数。这需要解析参数并教您的工作人员服务有关参数,例如--config /path/to/file。然后你的工作服务将只读取传入的路径,而不必担心路径。无论您的服务运行/配置什么,都将在 Windows 和 Linux 上提供正确的路径。

    3. 您可以通过LC2_CONFIG 等环境变量添加对读取文件位置的支持。如果它已设置并指向一个文件,则将该位置用作配置文件。否则回退到硬编码的值。在 Linux 上,运行守护程序的工具可以为其提供适合 Linux 的路径。

    还有其他可能的选项和变体,但这些似乎是最明显的方法。

    根据节目的观众,您可能需要全部三个。例如,git 将使用配置文件的默认位置。但它会让用户既可以通过命令行提供特定的配置值,也可以让用户通过环境变量指定配置。

    【讨论】:

    • 感谢您的回答。我在.service 文件中使用DOTNET_CLI_HOME' environment variable to spec。这会有用吗?
    • 当然可以,但您能帮您弄清楚您要查找的内容吗?我相信人们可以在上面写几章的信息。
    • 根据您的建议,我尝试创建一个文件,但不适用于 linux。请看一下stackoverflow.com/questions/62255952/…
    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多