Моя функция Azure периодически не может прочитать строку подключения - PullRequest
0 голосов
/ 02 марта 2019

У меня есть функция Azure, которая запускается из триггера очереди.В хранилище есть метод для получения строки подключения из коллекции ConnectionStrings.

return System.Configuration.ConfigurationManager.ConnectionStrings["MyDataBase"].ToString();

Это прекрасно работает по большей части, но я периодически вижу, что это возвращает нулевую ошибку исключения.
Есть ли способ сделать это более надежным?Функции Azure иногда не могут получить настройки?Должен ли я сохранить настройки в другом разделе?Я также хочу сказать, что это выполняется тысячи раз в день, но я вижу это всплывающее окно около 100 раз.Рабочая версия: 1.0.12299.0

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Решением было добавить частную статическую строку для строки подключения.Тогда только чтение из конфигурации, если это не удается.Затем я добавил повтор, который остановился на полсекунды.Это, в основном, исключило это.

private static string connectionString = String.Empty;
    private string getConnectionString(int retryCount)
    {
        if (String.IsNullOrEmpty(connectionString))
        {
            if (System.Configuration.ConfigurationManager.ConnectionStrings["MyEntity"] != null)
            {
                connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyEntity"].ToString();
            }
            else
            {
                if (retryCount > 2)
                {
                    throw new Exception("Failed to Get Connection String From Application Settings");
                }
                retryCount++;
                getConnectionString(retryCount);
            }
        }
        return connectionString;
    }

Я не знаю, идеально ли это, но это работает.Я не видел этого исключения 30 раз в день.

0 голосов
/ 02 марта 2019

Вы читаете конфигурацию для каждого вызова функции?Вы должны прочитать его один раз (например, используя Lazy<string> и static) и повторно использовать его для всех вызовов функций.

Возможно, существует проблема параллелизма, когда несколько потоков обращаются к коду.Помещение lock вокруг кода также может помочь.ConfigurationManager.ConnectionStrings должен быть безопасен для протектора, но, возможно, его нет во время выполнения V1.

Аналогичная проблема была размещена здесь , но это касалось настроек приложения, а не строк подключения.Я не думаю, что использование CloudConfigurationManager должно быть правильным решением.

Вы также можете попробовать добавить строку подключения в настройки приложения, если вы не используете Entity Framework.

Строки подключенияследует использовать только с приложением-функцией, если вы используете платформу сущностей.Для других сценариев используйте Настройки приложения. Нажмите, чтобы узнать больше .(через портал Azure)

Не уверен, относится ли это и к среде выполнения V1.

...