netcore net dotnet deploy contained asp asp.net asp.net-mvc azure web-deployment microsoft-web-deploy

asp.net - net - Web Deploy to Azure no obliga a la aplicación web a recuperar nuevos cambios



net core 2.1 publish exe (2)

Tengo una implementación automática configurada desde mi GIT a la Azure App usando Web Deploy . Cada vez que se inserta un nuevo código en el repositorio, se inicia la compilación y luego se despliega en Azure con Web Deploy .

El problema es que la Web App (ASP.NET MVC) continúa atendiendo las solicitudes utilizando el código implementado, y el reemplazo del archivo en realidad no lo afecta. Incluso si se modificó web.config. Básicamente, la única forma en que puedo forzar la nueva aplicación cargada es reiniciarla (o detenerla / iniciarla) manualmente.

aquí está mi perfil de 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>

tema similar en msdn sin respuesta


Corrígeme si me equivoco aquí, pero ¿qué otra cosa esperabas? Si la aplicación se está "ejecutando", sirviendo solicitud, entonces los ensamblajes se cargan en la memoria. Si los actualiza, debe volver a cargar la aplicación para cargar los nuevos conjuntos. Hasta donde sé, no hay forma de eliminar ensamblajes de un dominio de aplicación existente. Así que terminas necesitando crear uno nuevo (reiniciando la aplicación).

Una solución simple es implementar un archivo app_offline.htm junto con su aplicación. Si IIS ve este archivo, luego deja de responder a las nuevas solicitudes, las solicitudes que ya están en el sistema serán atendidas, y luego la aplicación se detendrá. Por cada nueva solicitud, se app_offline.htm el contenido de la app_offline.htm . Después de completar la implementación, ejecute una secuencia de comandos simple con WebDeploy, por ejemplo, utilizando -postSync:runcommand= en msdeploy y simplemente elimine el archivo app_offline.htm . La nueva versión de la aplicación se iniciará.

Si actualiza el archivo web.config , la nueva configuración se debe cargar automáticamente. Pero esto no significa que la aplicación se volverá a cargar por completo.

Si tiene este problema con los archivos estáticos, entonces tal vez el caché de HTTP es su problema. Los archivos se actualizan, pero los clientes (navegadores) los cargan desde el caché. Vea esta pregunta para más detalles.


David ya ha compartido sus ideas. Hay una forma alternativa de abordar este escenario mediante el uso de las Ranuras de implementación . Puede crear una ranura y luego configurar Auto-Swap para abordar esto. Esto tiene beneficios adicionales de cero arranque en frío y cero tiempo de inactividad .

Consulte esto para obtener más información: Configurar intercambio automático