Azure webjobs未读取站点应用程序设置

Azure webjobs未读取站点应用程序设置,azure,azure-webjobs,Azure,Azure Webjobs,我有一个azure webjob,它有一些api密钥的应用设置等 我还拥有一系列生产azure应用程序设置(在门户中指定),它们应该覆盖我的webjob配置应用程序设置。。但他们没有 对于我的网站,他们的工作如预期,一切都很好。然而,对于webjobs,它们只是被完全忽略,而使用配置中的“我的应用程序”设置 这是azure中的一个bug吗?所有的文件都建议这应该行得通 编辑 我找到了有关使用CloudConfigurationManager.GetSetting的所有信息,因此我已经实现了这一点

我有一个azure webjob,它有一些api密钥的应用设置等

我还拥有一系列生产azure应用程序设置(在门户中指定),它们应该覆盖我的webjob配置应用程序设置。。但他们没有

对于我的网站,他们的工作如预期,一切都很好。然而,对于webjobs,它们只是被完全忽略,而使用配置中的“我的应用程序”设置

这是azure中的一个bug吗?所有的文件都建议这应该行得通

编辑

我找到了有关使用
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();
        }