问题: 目前有几个程序跑在 IIS 10 上面,asp.net 4.0 应用池,在更新程序的时候,是构建之后将 bin 文件夹里的内容和其它一些必要文件用命令 xcopy 覆盖到现在正在运行的程序上,
但有时候同一个构建后的文件,发到几台 windows 上相同的应用程序,会有个别一两台出现无法查询数据库,程序无法正常执行,好像和 LINQ 有关,提示 Sequence contains no elements ,System.Data.Entity.Internal.InternalContext.Initialize
文件是和其他正常的文件夹对比过的,发布时的覆盖是没有失败的文件的
被这个问题困扰好久了,希望有大佬帮忙解惑,多谢~~
1
Eiden 2023-07-06 23:18:36 +08:00
远程调试下呗
|
2
jiulang 2023-07-06 23:26:34 +08:00 1
IEnumerable.Min() Max() First() Last() Sum()等这些操作,需要集合至少有 1 个元素。
|
3
itplanes01 OP @jiulang 问题是同样的 bin 目录文件覆盖到几台相同的应用程序,有几台可以,有一台不行,用同样的这个 bin 目录文件,手动停止应用池,然后重新覆盖一遍文件,再启动应用池,就好了,什么都没有改动
|
4
jiulang 2023-07-06 23:35:58 +08:00 1
@itplanes01 IIS 的应用回收机制具体不清楚,例如有脱缰的后台线程,也可能会影响应用的快速回收。
保险一点,还是要停止应用(对应到 w3p 进程)再更新吧。反正有多个节点。 |
5
Rocketer 2023-07-07 01:11:00 +08:00 via iPhone 1
这看着就不是个静态问题,而是运行时问题。虽然你编译的文件一致,但每次运行读出来的数据不一致啊
|
6
yinmin 2023-07-07 01:31:37 +08:00 via iPhone 1
你是不是从其他电脑直接 xcopy 到服务器 iis 的网站目录下的?
请尝试先 copy 到服务器的临时目录,然后在从临时目录 copy 到 iis 的网站目录,以确保网站程序的更新过程<1 秒,过长的更新时间可能会引发 iis 故障。 |
7
itplanes01 OP @jiulang 停止进程太慢了,一台更新完成 4 分钟。。十几台
|
8
itplanes01 OP @yinmin 目前就是把压缩包传到服务器,然后解压到临时目录再 xcopy 到原应用程序目录的
|
9
itplanes01 OP @Rocketer 有这个猜测,但没头绪定位
|
10
forgottencoast 2023-07-07 09:30:52 +08:00 1
实际上 IIS 运行 ASP.NET 时有自己的临时目录,我们之前遇到过这个目录的文件是旧版本的,手动删除这个目录然后 IIS 会自动重新生成,然后就 OK 了。
按照你#7 的说法完全可以先更新一半服务器,然后再更新另外一半服务器。 |
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 |
12
itplanes01 OP @LemonNoCry 多谢,这个看着对 asp.net 站点有效果,我测试下看看
|
13
itplanes01 OP @forgottencoast 十几台服务器是有好几个不同的环境的,一半一半全部发完最快也得 20+分钟啊
|
14
forgottencoast 2023-07-08 08:36:40 +08:00
|