2014-11-17 45 views
12

我有一个蔚蓝的webjob,具有对API密钥等一些AppSettings的Azure的webjobs不读该网站的AppSettings

我也有一大堆的生产蔚蓝的应用程序设置(在门户网站指定),那应该重写我的webjob配置appsettings ..但他们没有。

对于我的网站,它们按预期工作,一切正常。然而,对于webjobs,他们只是完全忽略了,而我的应用程序从配置设置被用来代替。

这是一个天蓝色的错误吗?所有文件都表明这应该起作用。

编辑

我发现this blog所有关于使用CloudConfigurationManager.GetSetting所以,我实现了,它仍然是行不通的 - 仍然使用网络作业的应用程序设置中定义的设置文件:(

感谢

回答

6

所以它看起来像我发现了一个bug!

这是因为我的AppSettings从另一个文件中引用,LIK e(在app.config中):

<AppSettings file="appsettings.config"/> 

这基本上打破了azure的配置管理。

+0

你应该纪念这个作为ANSW呃那么。 –

+0

那么,这里有什么解决方案? –

+0

你有什么理由让他们在一个单独的文件?如果你只在开发/调试中需要这个,你可以创建一个web配置变换,以便调试使用这个单独的文件,然后把它保留在变换之外或者没有一个,用于其他环境 –

1

使用

“d:\家\网站\ wwwroot的\” 建立自己的网站内的绝对路径的文件。

在您的WebJob内指向您的wwwwroot目录内的任何文件。对D:\ home \ site \ wwwroot \ appsettings.config使用绝对路径应该可以修复您的网站。

+1

这样你只需要担心一个配置文件。我喜欢。 –

1

您是仅在Web.config文件中设置了设置,还是在门户中设置了它们,或者使用VS“网站设置”工具设置了它们?您需要在该级别设置与WebJobs相关的设置,而不仅仅是在Web.config中。一旦你这样做,重新启动您的网站,设置应该在那里。

0

解决此问题的方法是将设置内联放置在Web.config的AppSettings标记中,如下所示。

<AppSettings> 
    <add key="host" value="someHost" /> 
</AppSettings> 
0

我有一个类似的问题,但对我来说,它是我们将“is_in_place”settings.job值设置为true。我想当它到位时,它不会使用设置更新配置文件。我们没有严格的要求,因此删除该设置可以解决我们的问题。

0

我有一个共享公共设置文件的几个web作业类似的问题。复制每个作业中的设置会很不方便。

有人提到在app.config中使用configSource=而不是file=来引用外部配置设置文件。我试过了,看起来它现在按预期工作。这些设置是从门户应用程序设置取而代之的。

幸运的是,网络作业的设置都来自外部文件。 file=的使用允许我使用除文件中的应用程序以外的其他每个应用程序设置,但幸运的是,我不需要那样做。

0

Azure应用程序服务应用程序设置将保留在环境变量中。转到Azure门户添加您的应用程序设置或连接字符串值。然后,你可以在https://sitename.scm.azurewebsites.net

检查你的应用程序服务的环境变量,如果你想你webjobs共享这些设置,在您的webjob项目,创建appsettings.json:

{ 
    "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(); 
     } 

这是不是试图找出路径网站配置上的应用程序服务简单