Случайно недоступные настройки приложения в лазурной функции local.settings.json - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть функция Azure с настройкой приложения в файле local.settings.json.Иногда, когда я запускаю свою функцию для отладки, я попадаю в строку, чтобы получить настройку, и она становится нулевой.В других случаях это строка из JSON.Там, кажется, нет рифмы или причины для этого.Есть ли способ заставить его получить правильное значение каждый раз?Есть ли какое-то состояние гонки при подключении отладчика?

Код моей функции:

[FunctionName("MyAzureFunction")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
    // this string is null sometimes, sometimes not
    var baseApiString = ConfigurationManager.AppSettings["ApiBaseUrl"];

    //...more code
}

Файл local.settings.json:

{
    "IsEncrypted": false,
    "Values": {
        "ApiBaseUrl": "http://myurl.api.local/"
    }
}

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

1 Ответ

0 голосов
/ 28 февраля 2019

Вот рекомендуемый способ считывания настроек в вашей функции лазури.пожалуйста, найдите код прилагается

public static class EnvironmentVariablesExample
{
    [FunctionName("GetEnvironmentVariables")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
        log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
    }

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

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

Свойство System.Configuration.ConfigurationManager.AppSettings является альтернативным API для получения значений параметров приложения, но мы рекомендуем использовать GetEnvironmentVariable , как показано выше.

Ожидается, что коллекция значений будетСловарь, если он содержит не строковые значения, это может привести к тому, что функция Azure не сможет прочитать значения из local.settings.json.

Также, чтобы дать вам контекст, Вот что должно произойти.Когда вы запускаете из VS, он должен скомпилировать и скопировать все ваши файлы в выходной путь, что-то вроде bin \ Debug \ net461.Там вы должны найти папку для каждой функции, а также ваш host.json и local.settings.json.После этого VS запускает Azure.Functions.Cli.exe по указанному выше пути с этой папкой в ​​качестве текущего рабочего каталога, а хост запускается как аргументы.Это должно скопировать все ваши настройки из local.settings.json в Azure.Functions.Cli.exe.config в этой папке.

Надеюсь, это поможет.

...