penll
V2EX  ›  .NET

有没有大佬,知道.net core 或.net5 如何在 iis 上热更新、热发布

  •  
  •   penll · Nov 25, 2020 · 7387 views
    This topic created in 2176 days ago, the information mentioned may be changed or developed.

    之前网上看到,热更新 dll 到 iis 站点,不能覆盖,需要停止该站点,才能发布。 有没有人有啥解决方案。这样,我就能顺利更新到.net5 了。

    Supplement 1  ·  Nov 25, 2020
    就热更新哈,没有热发布的概念。

    热更新,就是不停止 iis 站点的情况下。更新 dll
    29 replies  •  2020-11-27 11:19:25 +08:00
    kiracyan
    kiracyan
    Nov 25, 2020
    1
    好像不太行 .net core 我记得 IIS 只是个代理
    crclz
    crclz
    Nov 25, 2020
    2
    你新建一个 demo 试试呗
    Oo0
    Oo0
    Nov 25, 2020
    3
    用 vs 的发布,它会提示 dll 被占用,但可以成功
    leeg810312
    leeg810312
    Nov 25, 2020 via Android
    4
    服务端能热更新?来了解一下哪家做到了
    kiracyan
    kiracyan
    Nov 25, 2020
    5
    不对 我试了下用 VS 发布 不勾删除现有文件就没问题啊
    sun1991
    sun1991
    Nov 25, 2020
    6
    @kiracyan 还是会重启服务进程的吧, 只是你不知道而已
    kiracyan
    kiracyan
    Nov 25, 2020
    7
    @sun1991 更新还有不重启进程的吗
    sun1991
    sun1991
    Nov 25, 2020
    8
    @kiracyan 可能是我理解有误. 到底热更新, 热发布是什么意思?
    penll
    penll
    OP
    Nov 25, 2020
    9
    @leeg810312 可以呀。我这边都是直接更新 dll
    penll
    penll
    OP
    Nov 25, 2020
    10
    @Oo0 是吗?那我试试哈
    penll
    penll
    OP
    Nov 25, 2020
    11
    @Oo0 vs 的发布,是直接发到服务器上吗?还是本地调试?
    TarotVoyager
    TarotVoyager
    Nov 25, 2020❤️1
    12
    https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/app-offline?view=aspnetcore-5.0

    不知道这个在.NET 5 还能用不

    现在手头上有个项目.NET Core 2.2 的还是有效,每次更新的时候会自动带一个 app_offline.htm 提交到站点目录下,更新完以后删除 app_offline.htm
    opengps
    opengps
    Nov 25, 2020
    13
    看你把热更新理解到什么程度:
    在开发角度,往往是实现替换 dll 文件的程度才算热更新
    在运维角度,可以通过集群后端切换不同站点的方式来尽可能无感知更换后台站点服务器,来实现“热升级”,如果有耐心,甚至可以做到无感知(被停机那台机器移出负载均衡后,多等一会直到剩余连接断开再更换文件,把已有的连接用完)
    CrazyMonkeyV
    CrazyMonkeyV
    Nov 25, 2020
    14
    热更新,需要你做动态加载 dll,以及相关逻辑
    sks4728
    sks4728
    Nov 25, 2020
    15
    动态加载 卸载 程序集 3.1 还是 3.0 开始支持吧
    vone
    vone
    Nov 25, 2020❤️2
    16
    我们 .NET Core 的系统是使用 7z 把 Release 目录打个 zip 包,复制 zip 包和部署脚本到服务器。
    部署脚本命令:
    1 、写入 app_offline.htm
    2 、调用 7z 释放 zip 包内容
    3 、删除 app_offline.htm

    步骤 1-3 期间如果访问网站会看到 app_offline.htm 文件的内容,不过这个脚本因为只是释放文件所以执行的非常快,一共就停机几秒。
    IDAEngine
    IDAEngine
    Nov 25, 2020 via iPhone
    17
    开负载均衡呗,搭建个新环境,然后把旧的迁移过来,平滑过渡
    h82258652
    h82258652
    Nov 25, 2020
    18
    我这边方案也是类似 16 楼的方案。StopSite 然后迁移数据库,接着 WebDeploy,部署完后就 StartSite,整套下来 10 秒不到。要完全无感知,上负载均衡吧。
    penll
    penll
    OP
    Nov 25, 2020
    19
    @chouchoui 谢谢大佬,我试试看这个 app_offline.htm 哈
    penll
    penll
    OP
    Nov 25, 2020
    20
    @vone 谢谢指点哈
    penll
    penll
    OP
    Nov 25, 2020
    21
    @IDAEngine 负载均衡的话,是已经有。但是,这边主要是服务端自己更新 dll 。负载均衡帐号在运维那边。
    penll
    penll
    OP
    Nov 25, 2020
    22
    @opengps 嗯,目前,就先简单的做。从服务端这个角度吧。这边运维协调还需要更多工作量
    exonuclease
    exonuclease
    Nov 25, 2020
    23
    巨硬自家的表示没玩过这种骚操作 我们是两套完整的环境然后切流量的
    penll
    penll
    OP
    Nov 25, 2020
    24
    @vone 停止这几秒,请求是完全不可用的是么。
    beginor
    beginor
    Nov 25, 2020 via Android
    25
    难道不是应该半夜更新么?
    penll
    penll
    OP
    Nov 25, 2020
    26
    @beginor 目前,.net framework,更新用户不影响。最多只是请求卡了一下。
    而且,我们有更新出问题,立刻回退的工具。
    更新大部分情况:
    是修复 bug
    发布新接口
    vone
    vone
    Nov 25, 2020❤️1
    27
    @penll 停机时所有请求都返回的是 app_offline.htm 的文件内容。
    ragnaroks
    ragnaroks
    Nov 26, 2020❤️2
    28
    iis 还真不清楚,我用 dotnet core 是写了个 loader,以 AppDomain 的形式加载 asp.net core 的 dll,可以做到不重启进程平滑过渡;前面用 nginx 套一层当 httpd 用;

    具体技术细节可以搜 dotnet single process mutli appdomain
    forgottencoast
    forgottencoast
    Nov 27, 2020
    29
    @leeg810312 你这个问题是什么意思?那些脚本语言做的服务端,哪个不是改了立即生效的?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   938 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 20:06 · PVG 04:06 · LAX 12:06 · JFK 15:06
    ♥ Do have faith in what you're doing.