Получение имени слота службы приложений Azure при запуске?

Как я могу получить имя слота (производственного или промежуточного) моей службы приложений при запуске основного процесса asp.net.

Переменная среды HTTP_HOST не устанавливается при запуске, и у меня нет http-запроса для проверки.


person Clement    schedule 03.05.2018    source источник


Ответы (1)


Если мы хотим получить имя хоста, вы можете использовать для этого переменную среды WEBSITE_HOSTNAME.

var hostName = Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME");

Если вы запустите его в среде слота, вы получите значение youwebsiteName-slotName.azurewebsites.net. Или, если вы запустите его в рабочей среде, вы получите значение youwebsiteName.azurewebsites.net.

Обновление:

Для этого мы могли бы использовать слот appsetting.

1. Перейдите в веб-приложение слота и настройте параметры приложения и проверьте настройки слота.

введите описание изображения здесь

2. Используйте следующий код, чтобы получить имя слота.

 string name = string.Empty;
 var sitName = Environment.GetEnvironmentVariable("APPSETTING_WEBSITE_SITE_NAME", EnvironmentVariableTarget.Process);
 var slotName = Environment.GetEnvironmentVariable("APPSETTING_KeyName", EnvironmentVariableTarget.Process); //APPSETTING_Test_Slot
 if (!string.IsNullOrEmpty(slotName))
 {
     name = sitName + "-" + slotName;
 }
 else
 {
     name = sitName;
 }
person Tom Sun - MSFT    schedule 03.05.2018
comment
Если вы запустите его в среде слота, вы получите значение youwebsiteName-slotName.azurewebsites.net. Или, если вы запустите его в производственной среде, вы получите значение youwebsiteName.azurewebsites.net. Я обновил ответ и добавил его описание. - person Tom Sun - MSFT; 03.05.2018
comment
На самом деле он всегда возвращает одни и те же значения в любом слоте. - person Clement; 04.05.2018
comment
Вы можете проверить WEBSITE_HOSTNAME с помощью своего слота куду (среда) - person Tom Sun - MSFT; 04.05.2018
comment
Извините, они на самом деле разные, но это не меняется при замене. Так что это довольно бесполезно. См. отзыв .azure.com/forums/169385-web-apps/suggestions/ - person Clement; 04.05.2018
comment
Если я правильно понимаю, действие по замене — это просто изменение перенаправления DNS с производства на слот, а не изменение хоста между производством и слотом. - person Tom Sun - MSFT; 04.05.2018
comment
Это правильно. Но мне нужен способ программно спросить, в каком слоте я сейчас? - person Clement; 04.05.2018
comment
Мы могли бы использовать настройку слота, чтобы сделать это. Я также обновляю ответ. - person Tom Sun - MSFT; 04.05.2018
comment
Это сработает, но проблема в том, что наличие любой настройки слота приведет к тому, что azure перезапустит приложение при смене промежуточной и рабочей среды, что не очень хорошо, поскольку для нас основная причина использования слотов — избежать перерыва в обслуживании. - person Clement; 05.05.2018
comment
Насколько мне известно, в приложении функции Azure мы могли бы получить имя слота с переменными среды APPSETTING_WEBSITE_SLOT_NAME. Но я не могу найти его в azure webApp. Я рекомендую вам оставить свой отзыв команде Azure. - person Tom Sun - MSFT; 14.05.2018
comment
Использование предложенного решения (как на снимке экрана) сработало для меня: slotName = Environment.GetEnvironmentVariable(test_KeyName, EnvironmentVariableTarget.Process); test_KeyName был определен как Staging или Production и зависит от слота. - person Meir Schreiber; 23.05.2018
comment
Привет @Клемент. Я думаю, что я в той же ситуации, что и вы (это описано также здесь feedback.azure.com/forums/169385-web-apps/suggestions/…). Не могли бы вы сказать мне, удалось ли вам решить эту проблему? - person Daniel; 31.05.2019
comment
@Daniel, мы используем Environment.GetEnvironmentVariable(WEBSITE_HOSTNAME), но он не меняется при замене (пока приложение не будет перезапущено) :( - person Clement; 01.06.2019