V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
penll
V2EX  ›  .NET

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

  •  
  •   penll · 2020-11-25 09:34:39 +08:00 · 6079 次点击
    这是一个创建于 1450 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2020-11-25 11:01:22 +08:00
    就热更新哈,没有热发布的概念。

    热更新,就是不停止 iis 站点的情况下。更新 dll
    29 条回复    2020-11-27 11:19:25 +08:00
    kiracyan
        1
    kiracyan  
       2020-11-25 10:13:07 +08:00
    好像不太行 .net core 我记得 IIS 只是个代理
    crclz
        2
    crclz  
       2020-11-25 10:20:40 +08:00
    你新建一个 demo 试试呗
    Oo0
        3
    Oo0  
       2020-11-25 10:34:50 +08:00
    用 vs 的发布,它会提示 dll 被占用,但可以成功
    leeg810312
        4
    leeg810312  
       2020-11-25 10:36:10 +08:00 via Android
    服务端能热更新?来了解一下哪家做到了
    kiracyan
        5
    kiracyan  
       2020-11-25 10:36:27 +08:00
    不对 我试了下用 VS 发布 不勾删除现有文件就没问题啊
    sun1991
        6
    sun1991  
       2020-11-25 10:40:16 +08:00
    @kiracyan 还是会重启服务进程的吧, 只是你不知道而已
    kiracyan
        7
    kiracyan  
       2020-11-25 10:44:49 +08:00
    @sun1991 更新还有不重启进程的吗
    sun1991
        8
    sun1991  
       2020-11-25 10:55:07 +08:00
    @kiracyan 可能是我理解有误. 到底热更新, 热发布是什么意思?
    penll
        9
    penll  
    OP
       2020-11-25 11:00:22 +08:00
    @leeg810312 可以呀。我这边都是直接更新 dll
    penll
        10
    penll  
    OP
       2020-11-25 11:01:39 +08:00
    @Oo0 是吗?那我试试哈
    penll
        11
    penll  
    OP
       2020-11-25 11:02:22 +08:00
    @Oo0 vs 的发布,是直接发到服务器上吗?还是本地调试?
    chouchoui
        12
    chouchoui  
       2020-11-25 11:03:21 +08:00   ❤️ 1
    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
        13
    opengps  
       2020-11-25 11:16:43 +08:00
    看你把热更新理解到什么程度:
    在开发角度,往往是实现替换 dll 文件的程度才算热更新
    在运维角度,可以通过集群后端切换不同站点的方式来尽可能无感知更换后台站点服务器,来实现“热升级”,如果有耐心,甚至可以做到无感知(被停机那台机器移出负载均衡后,多等一会直到剩余连接断开再更换文件,把已有的连接用完)
    CrazyMonkeyV
        14
    CrazyMonkeyV  
       2020-11-25 11:26:19 +08:00
    热更新,需要你做动态加载 dll,以及相关逻辑
    sks4728
        15
    sks4728  
       2020-11-25 11:46:07 +08:00
    动态加载 卸载 程序集 3.1 还是 3.0 开始支持吧
    vone
        16
    vone  
       2020-11-25 11:48:08 +08:00   ❤️ 2
    我们 .NET Core 的系统是使用 7z 把 Release 目录打个 zip 包,复制 zip 包和部署脚本到服务器。
    部署脚本命令:
    1 、写入 app_offline.htm
    2 、调用 7z 释放 zip 包内容
    3 、删除 app_offline.htm

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

    具体技术细节可以搜 dotnet single process mutli appdomain
    forgottencoast
        29
    forgottencoast  
       2020-11-27 11:19:25 +08:00
    @leeg810312 你这个问题是什么意思?那些脚本语言做的服务端,哪个不是改了立即生效的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5456 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 06:47 · PVG 14:47 · LAX 22:47 · JFK 01:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.