解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"
-前段时间,系统升级,由于系统更新发布时间较长,所以必须停掉站点进行更新。导致很多用户都来反馈系统无法访问,还认为站点被黑掉了。
所以经过那件事我们也在思考,如何做到不停机,进行热部署。
单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择,
当asp.net看到应用程序中app_offline.htm文件时,它会关闭应用程序的app-domain,然后将请求发给app_offline的内容。
所以,在维护,升级的时候,就不必停止你的WEB应用程序,而是一个友好的方式提示给用户,本网站正在更新的提示,这样体验会更友好。
1. 创建一个app_offline.htm的HTM页面文件,
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb2312">
<title>站点更新中</title>
</head>
<style>
div {
background-color:#ffffcc;
padding-top:10px;
padding-bottom:10px;
padding-left:10px;
padding-right:10px;
border-style:solid;
border-color:Black;
border-width:1px;
}
</style>
<body>
<div>
<h1>站点更新中</h1>
<p>站点更新中,请稍后访问。</p>
</div>
</body>
</html>
或者使用命令行
$pathToApp = '{PATH TO APP}' New-Item -Path $pathToApp -Name "app_offline.htm" -ItemType "file" # Provide script commands here to deploy the app Remove-Item -Path $pathToApp\app_offline.htm
2. 将app_offline.htm放在你的网站根目录下。这样,任何外部的请求的话,都会马上被转移到该页面了。
需要注意的是:
(1)app_offline.htm 不能小于 512 字节。
(2)IIS 站点和进程池不需要停止。
(3)只有对.aspx文件的请求才自动转到app_offline.htm文件;如果请求的是.htm, .asp等文件,则不会转到app_offline.htm
结合官方文档,找到了一个目前看算是比较好的解决方案
好点的解决方案(一次配置后,1秒钟更新):
在D盘根目录创建一个app_offline.htm文件,注意是.htm文件,不是.html
创建一个待发布文件夹,把需要更新的项目文件放到该目录下
创建一个bat执行文件,内容如下,通过bat文件完成更新
bat执行文件内容,直接拷贝后替换路径即可
@echo off call xcopy D:\app_offline.htm D:\运行的项目 call xcopy D:\待发布项目 D:\运行的项目 /s /e /Q /Y /I del D:\运行的项目\app_offline.htm
bat文件对应每一行的注释:
复制D盘根目录的app_offline.htm文件到项目运行的目录,接管所有的请求
复制待发布的文件到项目运行的目录完成覆盖更新
删除app_offline.htm文件恢复项目正常运行
阅读次数: