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

ASP.NET 问题求助 许久未能解决

  •  1
     
  •   itplanes01 · 2023-07-06 23:14:50 +08:00 · 1962 次点击
    这是一个创建于 511 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题: 目前有几个程序跑在 IIS 10 上面,asp.net 4.0 应用池,在更新程序的时候,是构建之后将 bin 文件夹里的内容和其它一些必要文件用命令 xcopy 覆盖到现在正在运行的程序上,

    但有时候同一个构建后的文件,发到几台 windows 上相同的应用程序,会有个别一两台出现无法查询数据库,程序无法正常执行,好像和 LINQ 有关,提示 Sequence contains no elements ,System.Data.Entity.Internal.InternalContext.Initialize

    文件是和其他正常的文件夹对比过的,发布时的覆盖是没有失败的文件的

    被这个问题困扰好久了,希望有大佬帮忙解惑,多谢~~

    14 条回复    2023-07-08 08:36:40 +08:00
    Eiden
        1
    Eiden  
       2023-07-06 23:18:36 +08:00
    远程调试下呗
    jiulang
        2
    jiulang  
       2023-07-06 23:26:34 +08:00   ❤️ 1
    IEnumerable.Min() Max() First() Last() Sum()等这些操作,需要集合至少有 1 个元素。
    itplanes01
        3
    itplanes01  
    OP
       2023-07-06 23:29:21 +08:00
    @jiulang 问题是同样的 bin 目录文件覆盖到几台相同的应用程序,有几台可以,有一台不行,用同样的这个 bin 目录文件,手动停止应用池,然后重新覆盖一遍文件,再启动应用池,就好了,什么都没有改动
    jiulang
        4
    jiulang  
       2023-07-06 23:35:58 +08:00   ❤️ 1
    @itplanes01 IIS 的应用回收机制具体不清楚,例如有脱缰的后台线程,也可能会影响应用的快速回收。
    保险一点,还是要停止应用(对应到 w3p 进程)再更新吧。反正有多个节点。
    Rocketer
        5
    Rocketer  
       2023-07-07 01:11:00 +08:00 via iPhone   ❤️ 1
    这看着就不是个静态问题,而是运行时问题。虽然你编译的文件一致,但每次运行读出来的数据不一致啊
    yinmin
        6
    yinmin  
       2023-07-07 01:31:37 +08:00 via iPhone   ❤️ 1
    你是不是从其他电脑直接 xcopy 到服务器 iis 的网站目录下的?

    请尝试先 copy 到服务器的临时目录,然后在从临时目录 copy 到 iis 的网站目录,以确保网站程序的更新过程<1 秒,过长的更新时间可能会引发 iis 故障。
    itplanes01
        7
    itplanes01  
    OP
       2023-07-07 08:22:27 +08:00 via Android
    @jiulang 停止进程太慢了,一台更新完成 4 分钟。。十几台
    itplanes01
        8
    itplanes01  
    OP
       2023-07-07 08:24:14 +08:00 via Android
    @yinmin 目前就是把压缩包传到服务器,然后解压到临时目录再 xcopy 到原应用程序目录的
    itplanes01
        9
    itplanes01  
    OP
       2023-07-07 08:25:00 +08:00 via Android
    @Rocketer 有这个猜测,但没头绪定位
    forgottencoast
        10
    forgottencoast  
       2023-07-07 09:30:52 +08:00   ❤️ 1
    实际上 IIS 运行 ASP.NET 时有自己的临时目录,我们之前遇到过这个目录的文件是旧版本的,手动删除这个目录然后 IIS 会自动重新生成,然后就 OK 了。
    按照你#7 的说法完全可以先更新一半服务器,然后再更新另外一半服务器。
    LemonNoCry
        11
    LemonNoCry  
       2023-07-07 11:57:20 +08:00   ❤️ 1
    建议在更新前
    请在 IIS 目录下 放 App_offline.htm 文件

    可以先
    xcopy App_offline.htm
    xcopy xxx
    del App_offline.htm


    微软文档:
    https://learn.microsoft.com/zh-cn/aspnet/core/host-and-deploy/app-offline?view=aspnetcore-7.0
    itplanes01
        12
    itplanes01  
    OP
       2023-07-07 23:41:29 +08:00
    @LemonNoCry 多谢,这个看着对 asp.net 站点有效果,我测试下看看
    itplanes01
        13
    itplanes01  
    OP
       2023-07-07 23:47:50 +08:00
    @forgottencoast 十几台服务器是有好几个不同的环境的,一半一半全部发完最快也得 20+分钟啊
    forgottencoast
        14
    forgottencoast  
       2023-07-08 08:36:40 +08:00
    @itplanes01
    没办法,大型网站更新一两天的都有。
    必须设计专门的更新流程。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1337 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:51 · PVG 01:51 · LAX 09:51 · JFK 12:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.