【问题标题】:Web Deploy to Azure doesn't force Web App to pickup new changesWeb 部署到 Azure 不会强制 Web 应用接受新的更改
【发布时间】:2017-06-24 07:39:37
【问题描述】:

我使用Web Deploy 配置了从我的GITAzure App 的自动部署。每次将新代码推送到 repo 时,都会启动构建,然后使用 Web Deploy 部署到 Azure

问题是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>

similar topic 在 msdn 没有回答

【问题讨论】:

  • 与 kudu 确认您的文件是否已更新?
  • 我不确定 KUDU,但在任何部署之后,我使用 ftp 客户端连接并可以在那里看到我的新文件。所以问题是应用程序没有接他们
  • 你在预编译视图吗?
  • 我尝试了没有和没有预编译的两个选项。部署后两者的工作方式相同。
  • 您可能有一些文件与您的应用程序冲突。右键单击您的项目,Properties > Package/Publish Web > Items to deploy 部分,确保“仅需要运行的文件此应用程序”被选中。然后,在您的发布配置文件中,将此选项更改为 false False 以删除其他文件。仅当您确定没有在您的服务器上存储任何未在项目中引用的额外文件(资产...)时才执行此操作,因为它们将被删除。

标签: asp.net asp.net-mvc azure web-deployment microsoft-web-deploy


【解决方案1】:

David 已经分享了他的见解。有另一种方法可以通过使用部署槽来解决这种情况。您可以创建一个插槽,然后配置自动交换来解决这个问题。这增加了零冷启动零停机时间的好处。

有关更多信息,请参阅此内容: Configure Auto Swap

【讨论】:

    【解决方案2】:

    如果我在这里错了,请纠正我,但是您还期望什么?如果应用程序正在“运行”,服务请求,则程序集被加载到内存中。如果您更新它们,您应该重新加载应用程序以加载新程序集。据我所知,没有办法从现有的 AppDomain 中删除程序集。所以你最终需要创建一个新的(通过重新启动应用程序)。

    一个简单的解决方案是将app_offline.htm 文件与您的应用程序一起部署。如果 IIS 看到这个文件,然后停止响应新请求,系统中已经存在的请求将被处理,然后应用程序将停止。对于app_offline.htm 的每个新请求内容,都将提供服务。完成部署后,使用 WebDeploy 运行一个简单的脚本,例如在msdeploy 中使用-postSync:runcommand= 并删除app_offline.htm 文件。新版本的应用程序将启动。

    如果您更新web.config 文件,则应自动加载新配置。但这并不意味着应用程序将被完全重新加载。

    如果您对静态文件有此问题,那么 HTTP 缓存可能是您的问题。文件已更新,但客户端(浏览器)从缓存中加载它们。详情请见this question

    【讨论】:

      猜你喜欢
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多