【问题标题】:.net core kestrel service can't use configuration.net 核心红隼服务无法使用配置
【发布时间】:2018-02-21 12:44:25
【问题描述】:

我已经使用 nginx 在 linux 上设置了一个 .net 核心应用程序。它与dotnet MyProject.dll 完美配合。但是,使用this 链接中的说明,当我尝试设置红隼服务时,似乎无法在启动类中使用Configuration。这是我的Program

public class Program
{

    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args)
    {

        var configEnv = new ConfigurationBuilder().AddEnvironmentVariables().Build();

        return WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .ConfigureAppConfiguration((ctx, builder) =>
            {
                var keyVaultEndpoint = configEnv["KEYVAULT_ENDPOINT"];
                if (!string.IsNullOrEmpty(keyVaultEndpoint))
                {
                    var azureServiceTokenProvider = new AzureServiceTokenProvider();
                    var keyVaultClient = new KeyVaultClient(
                        new KeyVaultClient.AuthenticationCallback(
                            azureServiceTokenProvider.KeyVaultTokenCallback));
                    builder.AddAzureKeyVault(
                    keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
                }
            })
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5050")
            .Build();
    }
}

我的入门班有以下内容:

services.AddDbContext<ApplicationDBContext>(config => {
    config.UseMySql(Configuration["ConnectionString"]);
});

当我使用 kestrel 运行 connectionString 参数属性时,我不断收到错误消息。连接字符串在 azure key vault 中设置。当我做dotnet MyProject.dll 时,这个和所有其他秘密都有效。使用红隼服务的时候,我也试过设置环境变量,还是没有出现同样的错误。

这是我的红隼服务:

[Unit]
Description=Example.NET Web API App running on Ubuntu

[Service]
WorkingDirectory =/ home / MyProject / publish2 / files
ExecStart=/usr/bin/dotnet /home/MyProject/publish2/files/MyProject.dll
Restart = always
RestartSec=10  # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=dotnet-example
User = www - data
#Environment=ASPNETCORE_ENVIRONMENT=Production
#Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false/etc/systemd/system/

[Install]
WantedBy=multi-user.target

我尝试过评论和不评论上面的环境变量。同样的结果。我需要为我的红隼服务添加什么内容吗?

更新 甚至尝试在服务文件中设置Environment=ConnectionString,还是一样。

【问题讨论】:

  • 您将ASPNETCORE_ENVIRONMENT 变量设置为什么?你的配置文件叫什么名字? www-data 用户是否有权访问上述配置文件?
  • ASPNETCORE_ENVIRONMENT 似乎没有在系统上设置。我没有任何用户www-data
  • 我刚刚尝试将www-data 更新为我当前的用户名,还尝试将行注释掉,还是一样。

标签: linux .net-core environment-variables kestrel-http-server azure-keyvault


【解决方案1】:

事实证明,.net core 在使用服务运行时读取的唯一环境变量是服务文件中配置的变量。在这个文件中添加它解决了这个问题:

Environment=KEYVAULT_ENDPOINT=myendpointurlhere

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2020-09-08
    • 2020-08-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多