IIS 8 发布 ASP.NET Core 应用程序 - 使用中的文件

问题描述 投票:0回答:3

是否可以将 ASP.NET(核心)应用程序发布到 IIS 8 上正在运行的网站,而无需手动停止和启动网站?

Visual Studio 2015 不断给出文件正在使用的错误。我正在使用发布到文件系统,因为我的 Web 部署到我们网络中的服务器最终失败,并出现无法在端口 443 的服务器上进行身份验证的错误。

我不介意 IIS 必须回收应用程序池,但是当我经常需要放下应用程序、发布(大约需要一分钟)并重新启动它时,这对用户来说并不是很好。

另一个选择是两个网站运行相同的应用程序,但前提是这是可自动化的。然后它会放下 2 个中的 1 个,更新这个,穿上它,放下第二个,更新这个并启动它。

第三个选项类似于热更新,我可以在应用程序运行时更新它。

任何人都可以为我指出正确的方向(也许是一些博客文章),因为我的谷歌搜索没有给我任何好的信息?

asp.net iis asp.net-core updates iis-8
3个回答
2
投票

如果您将名为 app_offline.htm 的文件复制到应用程序文件夹,IIS 将正常停止您的应用程序并开始提供 app_offline.htm 文件的内容。当应用程序停止时,您可以复制文件。复制文件后,删除 app_offline.htm 文件,IIS 将启动您的应用程序。当您部署到 Azure 时,VS 会为您执行此操作,但部署到文件系统时则不会。


0
投票

您提到“两个网站运行相同的应用程序”。您的意思是托管同一个应用程序的两个网络服务器吗?

如果您已经拥有多个 Web 服务器(也称为服务器集群或 Web Farm),您只需从集群中取出一些服务器并更新它们即可。这就是我们推出更新的方式。我们使用 Citrix 的软件来管理服务器场。它还处理负载平衡。这种类型的软件允许监视服务器,因此您可以确定所有用户何时“移出”Web 服务器(最近从集群中取出)。然后,您可以 iisreset、部署新版本,然后移至下一台服务器(或一组服务器,具体取决于您的配置)。我们有 20 多个虚拟 Web 服务器。通常,我们会关闭一半服务器,更新它们,然后在将前一半服务器放回集群/场时关闭另一半。这应该允许不间断的服务。我知道您希望使该过程自动化。我假设您使用的是 Windows NLB(网络负载平衡)。您可以编写一个 PowerShell 脚本来自动关闭服务器。这是一个参考: https://technet.microsoft.com/en-us/library/ee817138

我知道这可能被视为一种解决方法。我不确定 ASP.NET Core 是否始终需要回收应用程序池。我无法找到明确的答案。无论如何,大多数生产应用程序都应该位于多个 Web 服务器上。即使您没有很多用户,您也应该拥有多个 Web 服务器用于故障转移。


0
投票

Pawel 的答案中提到的

app_offline.html
功能可以在 Azure 发布管道中的 IIS Web 应用程序部署命令中自动化。

© www.soinside.com 2019 - 2024. All rights reserved.