Azure无法从WebJob中读取连接字符串

时间:2018-08-15 06:03:43

标签: c# azure asp.net-core azure-webjobs

我正在尝试使用.NET Core项目配置Azure WebJob。每次我在Azure中执行作业时,都会告诉我错误:

  

确保您设置的连接字符串名为   Microsoft Azure网站配置中的AzureWebJobsDashboard通过   使用以下格式   DefaultEndpointsProtocol = https; AccountName = NAME; AccountKey = KEY   指向Microsoft Azure存储帐户,其中Microsoft   存储了Azure WebJobs运行时日志。

这是我在其中配置所有内容以及配置内容的代码:

    private static void ConfigureServices(IServiceCollection serviceCollection)
    {
        // Optional: Setup your configuration:
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();

        // add any interfaces that will be needed here
        serviceCollection.AddScoped<IBatchJobService, BatchJobService>();

        // executes the job
        serviceCollection.AddScoped<ExecuteBatchJobs, ExecuteBatchJobs>();

        // One more thing - tell azure where your azure connection strings are
        var connStringDashboard = configuration["ConnectionStrings:AzureWebJobsDashboard"];
        var connStringStorage = configuration["ConnectionStrings:AzureWebJobsStorage"];

        Environment.SetEnvironmentVariable("AzureWebJobsDashboard", connStringDashboard);
        Environment.SetEnvironmentVariable("AzureWebJobsStorage", connStringStorage);
    }

这是appsettings.json文件:

{
  "ConnectionStrings": {
    "AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=xxxxxxxxxxx;AccountKey=mykey;",
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=xxxxxxxxxxx;AccountKey=mykey;"
  }
}

我在本地代码中的“ var connStringDashboard = ....”上设置了一个断点,它正确地从appsettings.json中读取值。

然后,它通过环境变量设置连接字符串。

是否有任何关于设置连接字符串出错的想法?似乎由于某种原因,Azure无法从环境变量中读取它们。

1 个答案:

答案 0 :(得分:4)

您需要在Web应用程序Application Settings刀片服务器的门户中设置AzureWebJobsDashboard连接字符串。 信息中心作为单独的网站扩展程序运行,并且无权访问appsettings.json

将连接字符串添加到“应用程序设置”边栏上的“ 连接字符串”部分

您可以更改代码,以便将appsettings.json文件和Azure Application Settings中的连接字符串重命名为其他名称(例如WebJobsStorageWebJobsDashboard),并那么它将起作用。

Environment.SetEnvironmentVariable("AzureWebJobsStorage", configuration.GetConnectionString("WebJobsStorage"));
Environment.SetEnvironmentVariable("AzureWebJobsDashboard", configuration.GetConnectionString("WebJobsDashboard"));

有关更多详细信息,您可以参考此issue