我将一个Core WebJob部署到Azure Web App中。我正在使用WebJobs version 3.0.6。
我注意到,WebJob代码不会立即拾取对连接字符串和应用程序设置(通过Azure Web UI添加)的更改。
这似乎与相同的连接字符串和应用程序设置没有立即显示在应用程序的KUDU env页面上相关(尽管我承认这可能是红色鲱鱼,并且可能是一些我不知道的KUDU缓存内容) 。
过去,我已经部署了一些非核心WebJob,并且没有遇到此问题,所以想知道它是否与核心有关?虽然我看不到如何影响显示KUDU的配置。
前几天,我遇到了这个问题(WebJob没有获取配置或KUDU中没有显示配置),但是却一无所获,所以就把它留了下来。当我第二天回来查看时,配置现在可以正确显示在KUDU中,并已由WebJob获取。所以我想知道在此期间发生了什么,这意味着现在可以按预期提取配置了。
在更改配置后,我尝试重新启动WebJob并重新启动应用程序,但似乎都没有效果。
还值得注意的是,我在程序设置过程中不加载appSettings.json
。话虽如此,正在加载的连接字符串通常是来自该文件的连接字符串,即我的本地计算机SQL Server / DB。我的理解始终是,Azure Web UI中的所有内容都将覆盖配置文件中的所有等效设置。 This post from David Ebbo表示通过在设置过程中调用AddEnvironmentVariables()
将导致遵守Azure配置,但这似乎不是这种情况。是否已更改,还是因为无法从Azure看到内容而按约定从该文件加载配置?
这是我的WebJob程序代码:
public static void Main(string[] args)
{
var host = new HostBuilder()
.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables();
})
.ConfigureWebJobs(webJobConfiguration =>
{
webJobConfiguration.AddTimers();
webJobConfiguration.AddAzureStorageCoreServices();
}
)
.ConfigureServices((context, services) =>
{
var connectionString = context.Configuration.GetConnectionString("MyConnectionStringKey");
services.AddDbContext<DatabaseContext>(options =>
options
.UseLazyLoadingProxies()
.UseSqlServer(connectionString)
);
// Add other services
})
.Build();
using(host)
{
host.Run();
}
}
所以我的问题是:
.AddJsonFile("appSettings.json")
,appSettings.json是否也正在加载?答案 0 :(得分:0)
指定配置源的顺序很重要,因为这确定了设置在多个位置时应用设置的优先级。在下面的示例中,如果appsettings.json和环境变量中都存在相同的设置,则环境变量中的设置将被使用。如果一个设置存在于多个位置,则最后一个配置源指定为“ wins”。 ASP.NET团队建议最后指定环境变量,以使您的应用运行所在的环境可以覆盖已部署的配置文件中设置的所有内容。
有关ASP.NET Core中的Azure App Services应用程序设置和连接字符串的更多详细信息,可以参考here