asp.net - Web Deploy to Azure ne force pas Web App à prendre en compte les nouvelles modifications



asp.net-mvc web-deployment (2)

J'ai un déploiement automatique configuré depuis mon application GIT vers Azure App aide de Web Deploy . Chaque fois que le nouveau code est transféré vers le référentiel, la génération est démarrée, puis déployée sur Azure avec Web Deploy .

Le problème est que Web App (ASP.NET MVC) continue à servir les demandes en utilisant le code déployé, et le remplacement de fichier ne l'affecte pas vraiment. Même si web.config a été modifié. Fondamentalement, le seul moyen de forcer le chargement de la nouvelle application est de la redémarrer (ou de l'arrêter / démarrer) manuellement.

voici mon profil 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>

sujet similaire à msdn sans réponse

https://src-bin.com


Answer #1

Corrigez-moi si je me trompe ici, mais à quoi vous attendiez-vous? Si l'application est "en cours d'exécution", la demande de service, alors les assemblys sont chargés en mémoire. Si vous les mettez à jour, vous devez recharger l'application pour charger les nouveaux assemblys. Autant que je sache, il n'existe aucun moyen de supprimer des assemblys d'un AppDomain existant. Vous devez donc en créer un nouveau (en redémarrant l'application).

Une solution simple consiste à déployer un fichier app_offline.htm avec votre application. Si IIS détecte ce fichier, puis cesse de répondre aux nouvelles demandes, les demandes déjà présentes dans le système seront traitées, puis l'application sera arrêtée. Pour chaque nouvelle demande, le contenu de app_offline.htm sera servi. Une fois le déploiement terminé, exécutez un script simple avec WebDeploy, par exemple en utilisant -postSync:runcommand= dans msdeploy et supprimez simplement le fichier app_offline.htm . La nouvelle version de l'application va démarrer.

Si vous mettez à jour le fichier web.config , la nouvelle configuration doit être chargée automatiquement. Mais cela ne signifie pas que l'application sera entièrement rechargée.

Si vous avez ce problème avec les fichiers statiques, alors la mise en cache HTTP est peut-être votre problème. Les fichiers sont mis à jour, mais les clients (navigateurs) les chargent depuis le cache. Voir cette question pour plus de détails.


Answer #2

David a déjà partagé ses idées. Il existe un autre moyen de résoudre ce problème en utilisant des emplacements de déploiement . Vous pouvez créer un emplacement, puis configurer Auto-Swap pour y remédier. Cela a ajouté des avantages de zéro démarrage à froid et zéro temps d'arrêt .

Voir ceci pour plus d'informations: Configurer l'échange automatique