Azure webjobs не читает настройки сайта

У меня есть лазурный webjob, у которого есть некоторые настройки для клавиш api и т.д.

У меня также есть куча настроек приложения Azuzure PRODUCTTION (указано в портале), которые должны переопределять настройки app для веб-приложений. Но они этого не делают.

Для моего сайта они работают так, как ожидалось, и все в порядке. Однако для webjobs они просто полностью игнорируются, и вместо этого используются настройки моего приложения из конфигурации.

Это ошибка в лазуре? Все документы предполагают, что это должно сработать.

ИЗМЕНИТЬ

Я нашел этот блог о использовании CloudConfigurationManager.GetSetting, поэтому я реализовал это, и он все равно не будет работать, все еще используя настройки, которые определены в Интернете файл настроек приложения работы: (

Спасибо

Ответ 1

Итак, похоже, что я нашел ошибку!

Это потому, что мой AppSettings ссылался на другой файл, как это (в app.config):

<AppSettings file="appsettings.config"/>

Это в основном нарушает управление конфигурацией azure.

Ответ 2

Используйте

"D:\home\site\wwwroot \", чтобы создать абсолютный путь к файлам внутри вашего сайта.

внутри вашего WebJob, чтобы указать на любой файл внутри вашего каталога wwwwroot. Использование Абсолютного пути с D:\home\site\wwwroot\appsettings.config должно исправить ваш сайт.

Ответ 3

Установили ли вы свои настройки только в файле Web.config или вы установили их на портале или с помощью инструментария VS "Настройки веб-сайта"? Вам необходимо установить параметры, связанные с WebJobs, на этом уровне, а не только в Web.config. После этого перезапустите свой сайт, и настройки должны быть там.

Ответ 4

Обходной путь к этой проблеме заключается в том, чтобы поместить параметры inline в тег AppSettings для Web.config следующим образом.

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

Ответ 5

У меня была аналогичная проблема, но для меня было установлено, что значение параметра is_in_place установлено в true. Я предполагаю, что когда он на месте, он не обновляет конфигурационный файл с настройками. У нас не было строгого требования, чтобы он выполнялся на месте, поэтому удаление этой настройки устранило проблему для нас.

Ответ 6

У меня есть аналогичная проблема с несколькими веб-заданиями, совместно использующими общий файл настроек. Было бы неудобно дублировать настройки в каждом задании.

Кто-то упомянул использовать configSource= вместо file= в app.config для ссылки на внешний файл настроек конфигурации. Я попробовал это, и кажется, что теперь он работает так, как ожидалось. Настройки теперь берутся из настроек приложения Portal, а не из файла.

К счастью, настройки для всех веб-заданий поступают из внешнего файла. Использование file= позволило мне использовать дополнительные настройки для одного приложения, отличные от тех, которые находятся в файле, но, к счастью, мне не нужно это делать.

Ответ 7

Параметры приложения Azure App Service сохраняются в переменных среды. Перейдите на портал Azure, добавьте свои настройки приложения или значения строки подключения. Затем вы можете проверить переменные среды службы вашего приложения на https://sitename.scm.azurewebsites.net

Если вы хотите, чтобы ваши webjobs делились этими настройками, в проекте webjob создайте 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();
        }

Это проще, чем пытаться выяснить путь к конфигурации веб-сайта в службе приложений