【问题标题】:Azure webjobs not reading the site appsettingsAzure webjobs 不读取站点 appsettings
【发布时间】:2015-01-14 12:01:33
【问题描述】:

我有一个 azure webjob,其中有一些用于 api 密钥等的 appsettings。

我还有一堆 PRODUCTION azure 应用设置(在门户中指定),应该覆盖我的 webjob config appsettings.. 但他们没有。

对于我的网站,它们按预期工作,一切都很好。然而,对于网络作业,它们完全被忽略了,而是使用了我的配置中的应用设置。

这是天蓝色的错误吗?所有文档都表明这应该可行。

编辑

我发现 this blog 完全是关于使用 CloudConfigurationManager.GetSetting 的,所以我已经实现了它,但它仍然无法工作 - 仍然使用 Web 作业的应用程序设置文件中定义的设置:(

谢谢

【问题讨论】:

    标签: azure azure-webjobs


    【解决方案1】:

    看来我发现了一个错误!

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

    <AppSettings file="appsettings.config"/>
    

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

    【讨论】:

    • 那么,这里的解决方案是什么?
    • 您将它们放在单独的文件中的原因是什么?如果您只需要在 Dev/Debug 中使用它,您可以为 Debug 创建一个 Web 配置转换以使用该单独的文件,然后在其他环境中将其保留在转换之外或没有转换
    • 您是否尝试改用configSource="appsettings.config"
    • 使用configSource="appsettings.config" 代替file="appsettings.config" 有效。有关差异的信息here。今天用 Microsoft.Azure.WebJobs v2.2.0 测试。
    【解决方案2】:

    使用

    “D:\home\site\wwwroot\”创建您网站内文件的绝对路径。

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

    【讨论】:

    • 这样你只需要担心一个配置文件。我喜欢它。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          多个网络作业共享一个通用设置文件时,我遇到了类似的问题。在每个作业中复制设置会很不方便。

          有人提到在app.config 中使用configSource= 而不是file= 来引用外部配置设置文件。我试过了,现在看来它可以按预期工作了。现在正在从 Portal 应用程序设置而不是文件中获取设置。

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

          【讨论】:

            【解决方案7】:

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

            如果您希望您的网络作业共享这些设置,请在您的网络作业项目中创建一个 appsettings.json:

            {
              "APPSETTING_AzureWebJobsDashboard": "",
              "APPSETTING_AzureWebJobsStorage": "",
              "SQLAZURECONNSTR_xxx": ""
            }
            

            在您的 Main() 方法中

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

            这比试图找出应用服务上网站配置的路径要简单

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-06-12
              • 1970-01-01
              • 1970-01-01
              • 2012-10-06
              • 2022-08-03
              相关资源
              最近更新 更多