Почему служба приложений Azure не надежно считывает мои строки подключения, когда я использую рабочий слот (служба базовых приложений) - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть API-интерфейс ASP.NET Core 2.1, который я развертываю в службе приложений Azure. Я использую Azure SQL Server для своих баз данных.

Ниже приведен скриншот блейда настроек приложения службы приложений (базы). Это показывает, что версия .Net Framework установлена ​​на 4.7.

enter image description here

У меня настроена служба приложений со слотами для развертывания.

Для каждого слота развертывания у меня есть строки подключения в колонке Application Settings со значениями, специфичными для баз данных этого слота (у меня есть 3 разные базы данных для каждого слота, и у меня есть 3 слота).

Слоты QA и DEV работали просто отлично в течение нескольких месяцев, однако сейчас мы переносим API на бета-сайты, используя слот Production (база службы приложений), и кажется, что строки соединения в слоте Production для Служба приложений не является надежным для чтения. В частности, кажется, что 2-я и 3-я строки соединения не читаются надежно.

Вот снимок экрана приложения «Служба приложений -> Настройка приложения», показывающий строки подключения;

enter image description here

Как видите, у меня проверены настройки слотов. HangfireDbConnectioinString всегда не читается, и UspsReferenceDbConnectionString кажется ненадежным, но это может быть из-за того, что база данных Hangfire не настраивается и выдает исключение.

Я использую эту же настройку для слотов QA и DEV, и они работают нормально. Эта проблема возникает только с настройками производственного слота (базовая служба приложений).

Если я включу фактические строки подключения в мой файл AppSettings.json моего API и повторно разверну их в слоте Production, API сможет правильно обращаться к базам данных. Конечно, это нежелательное решение, потому что оно помещает мои строки подключения в систему контроля версий.

На случай, если это имеет значение, приведен скриншот базового блейда App Service Extensions.

enter image description here

Ниже приведен раздел кода в моем файле Startup.cs, который настраивает базы данных.

    protected virtual void ConfigureDatabase(IServiceCollection services)
    {

        var sqlTransientErrors = new List<int>() { 10928, 10929, 10053, 10054, 10060, 40197, 40540, 40613, 40143, 64 };

        // Configure DBContexts with resilient SQL connections to SQL Server
        services.AddDbContext<ManifestContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("ManifestDbConnectionString"),
                sqlOptions =>
                {
                    sqlOptions.EnableRetryOnFailure(5, TimeSpan.FromSeconds(30),
                        sqlTransientErrors);
                    sqlOptions.CommandTimeout(Convert.ToInt32(Configuration["DbSettings:ManifestDbCommandTimeout"]));
                });
        });

        services.AddDbContext<UspsReferenceContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("UspsReferenceDbConnectionString"),
                sqlOptions =>
                {
                    sqlOptions.EnableRetryOnFailure(5, TimeSpan.FromSeconds(30), sqlTransientErrors);
                    sqlOptions.CommandTimeout(Convert.ToInt32(Configuration["DbSettings:UspsReferenceDbCommandTimeout"]));
                });
        });

        // Hangfire persistence store for background tasks
        services.AddHangfire(configuration =>
            configuration.UseSqlServerStorage(Configuration.GetConnectionString("HangfireDbConnectionString")));


    }

Как видите, я использую Configuration.GetConnectionString ("HangfireDbConnectionString") для получения строки подключения из конфигурации.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...