Проблемы с чтением настроек приложения в функции Azure - PullRequest
0 голосов
/ 18 апреля 2019

Это моя первая попытка создания функции приложения Azure. У меня это работает при работе на моей локальной машине разработчика. Теперь я развернул его в Azure и прикрепил к нему отладчик (очень круто, кстати!).

При работе на моем локальном хосте я могу использовать файл local.settngs.json для всех настроек приложения. Это отлично работает. Но мне кажется, что я сталкиваюсь с препятствиями в простом процессе доступа к настройкам приложения при удаленном запуске функции в Azure.

Сначала (а это битва, с которой я буду сражаться позже). Я уверен, что есть способ автоматического заполнения настроек в функции Azure в зависимости от того, что находится в local.settngs.json, но сейчас я добавил их все вручную ,

enter image description here

А сейчас давайте просто посмотрим на параметр StorageConnectionString, значение которого выглядит следующим образом:

DefaultEndpointsProtocol=https; AccountName=[redacted]; AccountKey=[redacted]; EndpointSuffix=core.windows.net

enter image description here

Все три из этих попыток получить значение работают на моем локальном хосте, но все три также терпят неудачу при отладке в удаленной функции Azure:

string storageConString = ConfigurationManager.AppSettings["StorageConnectionString"];

string storageConString = CloudConfigurationManager.GetSetting("StorageConnectionString");

string storageConString = Environment.GetEnvironmentVariable("StorageConnectionString");

Во всех случаях я получаю эту ошибку:

Сообщение об ошибке:

Значение не может быть нулевым. Имя параметра: itemName

Трассировка стека:

в Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.AssertNotNullOrEmpty (String paramName, String value) в c: \ Program Files (x86) \ Jenkins \ workspace \ release_dotnet_master \ Lib \ Common \ Core \ Util \ CommonUtility. cs: строка 143 в Microsoft.WindowsAzure.Storage.File.CloudFileDirectory.GetDirectoryReference (String itemName) в каталоге c: \ Program Files (x86) \ Jenkins \ workspace \ release_dotnet_master \ Lib \ Common \ File \ CloudFileDirectory.Common.cs: строка 224 в XXXXXXX.Common.AzureFunctions.ProcessInbound.DoBooksExist (BookSource bookSource) в XXXXXXX.Common.AzureFunctions.ProcessInbound.Run (TimerInfo myTimer, журнал TraceWriter)

Из-за этой ошибки я как бы озадачен, так как кажется, что она даже не применима. Почему, например, он звонит GetDirectoryReference(String itemName)?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Хорошо, наконец-то понял это.Суть проблемы - странное поведение отладчика при удаленном подключении.Я наконец понял реальную проблему, установив опцию «Конфигурация публикации» в «Отладка» перед публикацией:

enter image description here

Проблема заключалась в том, что когда я установил ее на «Release », отладчик будет прерываться на первую строку метода, в которой была ошибка, а НЕ на фактическую строку с ошибкой.Это привело меня к мысли, что я получаю сообщение об ошибке в строке, которая на самом деле не выдает ошибку.

Как только я узнал истинную строку, которая выдает ошибку, ее решение было несложным.

0 голосов
/ 18 апреля 2019

Чтобы получить переменную среды или значение параметра приложения, используйте System.Environment.GetEnvironmentVariable, как показано в следующем примере кода:

public static string GetEnvironmentVariable(string name)
{
    return System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

Параметры приложения можно прочитать из переменных среды как при локальной разработке, так и при работе в Azure. При локальной разработке параметры приложения берутся из коллекции Values в файле local.settings.json . В обеих средах, локальной и Azure, GetEnvironmentVariable("<app setting name>") извлекает значение параметра именованного приложения. Например, когда вы работаете локально, «Имя моего сайта» будет возвращено, если ваш local.settings.json файл содержит { "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }. Или вы можете использовать System.Environment.GetEnvironmentVariable :

Взято из Справочник разработчика по функциям Azure C # - переменные среды

...