Azure webjobs未读取站点应用程序设置
我有一个azure webjob,它有一些api密钥的应用设置等 我还拥有一系列生产azure应用程序设置(在门户中指定),它们应该覆盖我的webjob配置应用程序设置。。但他们没有 对于我的网站,他们的工作如预期,一切都很好。然而,对于webjobs,它们只是被完全忽略,而使用配置中的“我的应用程序”设置 这是azure中的一个bug吗?所有的文件都建议这应该行得通 编辑 我找到了有关使用Azure webjobs未读取站点应用程序设置,azure,azure-webjobs,Azure,Azure Webjobs,我有一个azure webjob,它有一些api密钥的应用设置等 我还拥有一系列生产azure应用程序设置(在门户中指定),它们应该覆盖我的webjob配置应用程序设置。。但他们没有 对于我的网站,他们的工作如预期,一切都很好。然而,对于webjobs,它们只是被完全忽略,而使用配置中的“我的应用程序”设置 这是azure中的一个bug吗?所有的文件都建议这应该行得通 编辑 我找到了有关使用CloudConfigurationManager.GetSetting的所有信息,因此我已经实现了这一点
CloudConfigurationManager.GetSetting的所有信息,因此我已经实现了这一点,但它仍然不起作用-仍然使用web作业的应用程序设置文件中定义的设置:(
谢谢看来我发现了一个bug
这是因为我的AppSettings
是从另一个文件引用的,例如(在app.config中):
这基本上破坏了azure的配置管理。使用
“D:\home\site\wwwroot\”创建网站内文件的绝对路径。
在WebJob中指向WWroot目录中的任何文件。使用绝对路径D:\home\site\wwwroot\appsettings.config应该可以修复您的网站。您是仅在Web.config文件中设置设置,还是在门户中设置,还是使用VS“网站设置”工具?您需要在该级别设置与WebJobs相关的设置,而不仅仅是在Web.config中。完成此操作后,重新启动您的网站,设置应该在那里。解决此问题的方法是将设置内联放置在Web.config的AppSettings标记中,如下所示
<AppSettings>
<add key="host" value="someHost" />
</AppSettings>
我也遇到了类似的问题,但对我来说,我们设置了“is_in_place”settings.job value设置为true。我猜当设置到位时,它不会用设置更新配置文件。我们没有严格要求它在适当位置运行,因此删除该设置为我们解决了问题。我有一个类似的问题,即多个web作业共享一个公共设置文件。复制配置文件会很不方便在每项工作中都有一些细节
有人提到在app.config
中使用configSource=
而不是file=
来引用外部配置设置文件。我尝试了这一点,现在它似乎可以正常工作。设置是从门户应用程序设置中获取的,而不是现在的文件
幸运的是,web作业的设置都来自外部文件。file=
的使用允许我使用除文件中的设置以外的其他每个应用程序设置,但幸运的是我不需要这样做。Azure应用程序服务应用程序设置将保留在环境变量中。转到Azure门户添加设置您的应用程序设置或连接字符串值。然后,您可以在
如果希望webjob共享这些设置,请在webjob项目中创建appsettings.json:
{
"APPSETTING_AzureWebJobsDashboard": "",
"APPSETTING_AzureWebJobsStorage": "",
"SQLAZURECONNSTR_xxx": ""
}
在Main()方法中
private static void Main(字符串[]args)
{
var builder=new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
.AddenEnvironmentVariables();
var configurations=builder.Build();
var services=newservicecolection()
.AddDbContext(选项=>
选项。使用SQLServer(配置[“SQLAZURECONNSTR_xxx”]),
服务生命周期(瞬时)
.BuildServiceProvider();
var host=new JobHost(new JobHostConfiguration
{
Dashboard ConnectionString=配置[“应用程序设置”\u AzureWebJobsDashboard”],
StorageConnectionString=configurations[“APPSETTING\u AzureWebJobsStorage”]
});
host.RunAndBlock();
}
这比试图在应用程序服务上找到网站配置的路径要简单那么,这里的解决方案是什么?将它们放在单独文件中的原因是什么?如果您只在Dev/Debug中需要它,您可以为Debug创建一个web配置转换以使用该单独文件,然后将其从转换或调试中删除没有,对于另一个环境,您可以尝试使用configSource=“appsettings.config”
而不是configSource=“appsettings.config”
而不是file=“appsettings.config”
有效。有关差异的信息。今天使用Microsoft.Azure.WebJobs v2.2.0进行了测试。这样,您只需担心一个配置文件。我喜欢它。
{
"APPSETTING_AzureWebJobsDashboard": "",
"APPSETTING_AzureWebJobsStorage": "",
"SQLAZURECONNSTR_xxx": ""
}
private static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
var configurations = builder.Build();
var services = new ServiceCollection()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(configurations["SQLAZURECONNSTR_xxx"]),
ServiceLifetime.Transient)
.BuildServiceProvider();
var host = new JobHost(new JobHostConfiguration
{
DashboardConnectionString = configurations["APPSETTING_AzureWebJobsDashboard"],
StorageConnectionString = configurations["APPSETTING_AzureWebJobsStorage"]
});
host.RunAndBlock();
}