Ответ 1
Итак, похоже, что я нашел ошибку!
Это потому, что мой AppSettings
ссылался на другой файл, как это (в app.config):
<AppSettings file="appsettings.config"/>
Это в основном нарушает управление конфигурацией azure.
У меня есть лазурный webjob, у которого есть некоторые настройки для клавиш api и т.д.
У меня также есть куча настроек приложения Azuzure PRODUCTTION (указано в портале), которые должны переопределять настройки app для веб-приложений. Но они этого не делают.
Для моего сайта они работают так, как ожидалось, и все в порядке. Однако для webjobs они просто полностью игнорируются, и вместо этого используются настройки моего приложения из конфигурации.
Это ошибка в лазуре? Все документы предполагают, что это должно сработать.
ИЗМЕНИТЬ
Я нашел этот блог о использовании CloudConfigurationManager.GetSetting
, поэтому я реализовал это, и он все равно не будет работать, все еще используя настройки, которые определены в Интернете файл настроек приложения работы: (
Спасибо
Итак, похоже, что я нашел ошибку!
Это потому, что мой AppSettings
ссылался на другой файл, как это (в app.config):
<AppSettings file="appsettings.config"/>
Это в основном нарушает управление конфигурацией azure.
Используйте
"D:\home\site\wwwroot \", чтобы создать абсолютный путь к файлам внутри вашего сайта.
внутри вашего WebJob, чтобы указать на любой файл внутри вашего каталога wwwwroot. Использование Абсолютного пути с D:\home\site\wwwroot\appsettings.config должно исправить ваш сайт.
Установили ли вы свои настройки только в файле Web.config или вы установили их на портале или с помощью инструментария VS "Настройки веб-сайта"? Вам необходимо установить параметры, связанные с WebJobs, на этом уровне, а не только в Web.config. После этого перезапустите свой сайт, и настройки должны быть там.
Обходной путь к этой проблеме заключается в том, чтобы поместить параметры inline в тег AppSettings для Web.config следующим образом.
<AppSettings>
<add key="host" value="someHost" />
</AppSettings>
У меня была аналогичная проблема, но для меня было установлено, что значение параметра is_in_place установлено в true. Я предполагаю, что когда он на месте, он не обновляет конфигурационный файл с настройками. У нас не было строгого требования, чтобы он выполнялся на месте, поэтому удаление этой настройки устранило проблему для нас.
У меня есть аналогичная проблема с несколькими веб-заданиями, совместно использующими общий файл настроек. Было бы неудобно дублировать настройки в каждом задании.
Кто-то упомянул использовать configSource=
вместо file=
в app.config
для ссылки на внешний файл настроек конфигурации. Я попробовал это, и кажется, что теперь он работает так, как ожидалось. Настройки теперь берутся из настроек приложения Portal, а не из файла.
К счастью, настройки для всех веб-заданий поступают из внешнего файла. Использование file=
позволило мне использовать дополнительные настройки для одного приложения, отличные от тех, которые находятся в файле, но, к счастью, мне не нужно это делать.
Параметры приложения 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();
}
Это проще, чем пытаться выяснить путь к конфигурации веб-сайта в службе приложений