24

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

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

вот мой publishig Профиль:

<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> 

similar topic в MSDN без ответа

+0

Have проверить с куду, если файлы были обновлены? –

+0

Я не уверен в KUDU, но после любого развертывания я подключаюсь с помощью ftp-клиента и вижу там свои новые файлы. Так что проблема в том, что приложение не собирает их –

+0

Вы предварительно компилируете представления? – lucuma

ответ

0

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

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

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

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

1

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

Смотреть это для получения дополнительной информации: Configure Auto Swap

 Смежные вопросы

  • Нет связанных вопросов^_^