2014-11-17 3 views
12

У меня есть лазурь webjob, который имеет некоторые AppSettings для ключей API и т.д.Azure webjobs не читает сайт AppSettings

Я также получил кучу настроек лазури приложения ПРОИЗВОДСТВЕННЫХ (указанную на портале), что должен переопределить мои настройки конфигурации webjob .. Но они этого не делают.

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

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

EDIT

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

Благодаря

ответ

6

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

это потому, что мой AppSettings были ссылочного из другого файла, Лик e this (in app.config):

<AppSettings file="appsettings.config"/> 

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

+0

Вы должны отметить это как отве тогда. –

+0

Итак, какое решение здесь? –

+0

Какова была ваша причина для их использования в отдельном файле? Если вам это нужно только в Dev/Debug, вы можете создать преобразование веб-конфигурации для Debug для использования этого отдельного файла, а затем просто оставить это из преобразований или не иметь его для других сред. –

1

Использование

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

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

+1

Таким образом, вы беспокоитесь только об одном файле конфигурации. Мне это нравится. –

1

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

0

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

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

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

0

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

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

К счастью, настройки для всех веб-заданий поступают из внешнего файла. Использование 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(); 
     } 

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