Слоты для развертывания Umbraco, Azure и строки подключения

Мы пытаемся использовать слоты развертывания Azures для сайта Umbraco, который мы создали.

По умолчанию Umbraco использует DSN, определенный в разделах connectionStrings файла web.config, и мы хотим, чтобы он использовал строку подключения для слота развертывания, в котором он находится.

Что мы пробовали

Слоты развертывания Azure помещают все определенные параметры приложения (и строки подключения) в переменные среды и для доступа к ним мы можем использовать Environment.GetEnvironmentVariable() который работает, но, кажется, нет способа заставить Умбрако сделать это.

Поэтому в OnApplicationInitialized() (в /App_Code/Core/UmbracoAppStart.cs) мы загрузили раздел строки подключения из web.config, извлекли connstr из env vars, добавили DSN в раздел строки подключения и сохранили. Правильная строка подключения захватывается и сохраняется, но это, похоже, перезапускает приложение (из-за изменения web.config), и поэтому мы просто получаем тайм-ауты. (Или ошибки кэширования Umbraco XML, или загрузка страницы занимает 20 минут).

Я знаю, что вы можете хранить разделы appsettings и connectionstrings в отдельных файлах. Но атрибут файла (который не вызывает перезапуск, если указанный файл изменен) не работает в разделе connectionStrings - только атрибут configSource, и он перезапускается, если он был изменен.

(из: ASP.NET web.config: configSource и атрибуты файла)

Помогите

Кто-нибудь нашел способ обойти это? Нам просто нужно заставить Umbraco использовать строку подключения слота развертывания, а не ту, которая есть в webconfig.

Я даже готов копировать и вставлять вслепую в данный момент, не понимая, как это работает - и я ненавижу это делать:). Но это то, что происходит, когда люди соглашаются, когда клиент хочет жить как раз перед Рождеством...

1 ответ

Решение

Вам не нужно вводить код для использования строки подключения Azure или настроек приложения. Просто дайте им те же ключи / имена, что и у вас в файле web.config, и они будут использоваться вместо этого.

Так что, если у вас есть это в вашей веб-конфигурации:

<add name="umbracoDbDSN" connectionString="Server={server};Initial Catalog={db};Persist Security Info=False;User ID={user};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=300;" providerName="System.Data.SqlClient" />

Ваша конфигурация слота должна быть такой:

Чтобы заменить настройку приложения, просто используйте тот же ключ. Итак, для этого:

<add key="umbracoUseSSL" value="false" />

Вы бы использовали это:

Если вы хотите, чтобы настройка была специфичной для слота, вы должны активировать Slot setting флажок.

Другие вопросы по тегам