Подтвердить что ты не робот

Web Deploy to Azure не заставляет веб-приложение получать новые изменения

У меня есть автоматическое развертывание, настроенное с моего GIT на Azure App с помощью Web Deploy. Каждый раз, когда новый код помещается в репо, сборка запускается, а затем развертывается в Azure с Web Deploy.

Проблема в том, что Web App (ASP.NET MVC) продолжает обслуживать запросы с использованием развернутого кода, и замена файла на самом деле не влияет на него. Даже если web.config был изменен. В принципе, единственный способ заставить новое приложение загрузить - перезагрузить его (или остановить/запустить) вручную.

вот мой профиль публикации:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <ADUsesOwinOrOpenIdConnect>False</ADUsesOwinOrOpenIdConnect>
    <PublishProvider>AzureWebSite</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>https://app-name.azurewebsites.net</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>False</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <MSDeployServiceURL>app-name.scm.azurewebsites.net:443</MSDeployServiceURL>
    <DeployIisAppPath>app-name</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
    <EnableMSDeployBackup>True</EnableMSDeployBackup>
    <UserName>$app-name</UserName>
    <Password>...</Password>
    <AllowUntrustedCertificate>True</AllowUntrustedCertificate>
    <_SavePWD>True</_SavePWD>
    <_DestinationType>AzureWebSite</_DestinationType>
  </PropertyGroup>
</Project>

аналогичная тема в msdn без ответа

4b9b3361

Ответ 1

Дэвид уже поделился своими соображениями. Существует альтернативный способ решения этого сценария с помощью слотов развертывания. Вы можете создать слот, а затем настроить Auto-Swap, чтобы решить эту проблему. Это добавило преимущества нулевого холодного запуска и нулевого времени простоя.

Смотрите это для получения дополнительной информации: Настройка автоматической замены

Ответ 2

Исправьте меня, если я ошибаюсь здесь, но что еще вы ожидали? Если приложение "работает", обслуживающий запрос, то сборки загружаются в память. Если вы их обновите, вы должны перезагрузить приложение для загрузки новых сборок. Насколько я знаю, нет способа удалить сборки из существующего AppDomain. Поэтому вам нужно создать новую (перезапуская приложение).

Одним из простых решений является развертывание файла app_offline.htm вместе с вашим приложением. Если IIS видит этот файл, то перестает отвечать на новые запросы, запросы, которые уже в системе будут обслуживаться, тогда приложение будет остановлено. Для каждого нового запроса будет отображаться содержимое app_offline.htm. После завершения развертывания запустите простой script с помощью WebDeploy, например. используя -postSync:runcommand= в msdeploy и просто удалите файл app_offline.htm. Будет запущена новая версия приложения.

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

Если у вас есть эта проблема со статическими файлами, возможно, HTTP-кэширование - это ваша проблема. Файлы обновляются, но клиенты (браузеры) загружают их из кеша. Подробнее см. этот вопрос.